2011-07-03 14 views
5

Dlaczego zawsze robimy to podczas tworzenia konstruktorów w Objective C?Tworzenie konstruktorów w Objective-C

self = [super init]; 
if (self) { 
    //Initialization code here 
} 
+3

Pytanie [Niektóre pytania/iPhone Początkujący Objective-C] (http: // stackoverflow.com/questions/710568/some-beginner-objective-c-iphone-questions) prosi o to samo w pierwszej części i powinieneś przeczytać tam odpowiedź Barry'ego. Zobacz także "Sam = [głupi init] Wila Shipleya;" artykuł na więcej: http://www.wilshipley.com/blog/2005/07/self-stupid-init.html –

+0

Po prostu okazało się, że najlepiej to wyjaśnić w wykładzie 4 (około 25 minut) z wykładu Standford iOS. – NSExplorer

Odpowiedz

7

Mamy przypisać do self ponieważ [super init] może powrócić inny obiekt niż ten, który został powołany na. Mamy if (self), ponieważ [super init] może zwrócić nil.

1

self to klasa oparta na jakiejś nadklasie (np. UIViewController, NSObject - zobacz plik interfejsu, aby się upewnić, który). Nadklasa może wymagać jakiejś formy inicjalizacji, aby podklasa działała zgodnie z oczekiwaniami. Tak więc najpierw inicjując superklasę, upewniamy się, że ustawione są domyślne właściwości i tym podobne. Bez uprzedniego zainicjowania superklasy możemy doświadczyć bardzo nieoczekiwanego zachowania, szczególnie w bardziej złożonych obiektach, takich jak ViewControllers i tym podobne.

+4

W rzeczywistości "self" w metodzie init nie jest klasą. To niezainicjowana instancja obecnej klasy. – Chuck

+0

Tak, zgadza się. Dziękuję za poprawienie mnie. –

9

można utworzyć konstruktora i destruktora w Objective-C z

-(id) init 
{ 
    self = [super init]; 
    if(self) 
    { 
     //do something 
    } 
    return self; 
} 
-(void) dealloc 
{ 
    [super dealloc]; 
} 
Powiązane problemy