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
}
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
}
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
.
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.
W rzeczywistości "self" w metodzie init nie jest klasą. To niezainicjowana instancja obecnej klasy. – Chuck
Tak, zgadza się. Dziękuję za poprawienie mnie. –
Przeczytaj ten dokument Apple na inicjalizacji http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/ObjectiveC/Chapters/ocAllocInit.html
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];
}
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 –
Po prostu okazało się, że najlepiej to wyjaśnić w wykładzie 4 (około 25 minut) z wykładu Standford iOS. – NSExplorer