2009-06-15 13 views
10

To znaczy, nie ObjectiveC zachowywać się jak C, że jeśli tworzysz np palików:W ObjectiveC są to wskaźniki będące instancyjnymi zmiennymi instancji inicjowanymi jako "zero" lub w inny sposób?

NSString* c; 

Czy litera c do zera lub do wartości losowej w obszarze pamięci, która została zarezerwowana dla niego?

Innymi słowy, czy wskaźniki są inicjowane wstępnie, czy też muszę to zrobić sam? Jak już powiedziałem, jestem świadomy, że tak nie jest w C/C++, ale zastanawiam się, czy jest tu jakaś magia ObjC.

Odpowiedz

13

Class instancje zmiennych w Objective-C zagwarantowane mają być inicjowany do ich wartości pustej (0 Nil, etc ...)

+0

Brilliant - okrzyki. Niestety, oznacza to, że mój błąd nie jest tam, gdzie myślałem, że jest. – Chaos

+0

Mówiąc dokładniej, miejsce w pamięci dla klasy jest zerowane po przydzieleniu. Wskaźniki w metodzie lub funkcji działają dokładnie tak, jak w C. – Chuck

1

Oni są zerowe, a masz prawo zakładać to, na przykład poprzez testowanie :

if (nil == myVariableIHaventInitialisedYet) 
{ 
    myVariableIHaventInitialisedYet = [SomeThingIMightMake initWithLove]; 
} 
+0

Przyjemny kod yoda! – toxaq

3

Zmienne instancji klasy i zmienne statyczne/globalne zostają zainicjowane odpowiednio do wartości zero/NULL/0/false.

Jednak zmienne lokalne nie są inicjowane.

0

Zobacz lokalne zmienne na ten temat. Nie są inicjowane do zera, więc upewnij się, że zostały zainicjowane gdzieś przed użyciem, jeśli nie zainicjowałeś zerowania w swojej deklaracji. Jak mówi Peter, klasa, instancja i statyczne są dla ciebie puste, więc nie ma żadnych zmartwień.

Zwykle żadnych problemów, ale w szczególności będzie miała wpływ na połączenia z przekazanymi wskaźnikami referencji (np. NSError **).

Powiązane problemy