Podążałem za kilkoma tutorialami i padam z siebie. Czy ktoś może pomóc?Zrozumienie "ja" i ustawienie siebie jako super
Mam następujący init, który jest metodą instancji.
- (id) initWithScore:(int) s {
self = [super init];
if (self) {
score = s;
}
return self;
}
Teraz czytając kod ustawiam ja na super init, więc self wskazuje teraz na super. Następnie sprawdzam, czy wartość self jest poprawna, i ustaw wynik równy wartości przesłanej na moich InitialWIthScore. Mam to tak daleko.
Ale teraz zwracam siebie, co wskazuje na super, więc jak zwróciłem moją podklasę?
Stąd, powiedzmy, że ktoś wywołuje moją klasę przechodząc w 100, mój kod zwraca super nie klasę, więc jak to działa? W jaki sposób kod wywołujący ma wartość 100 w wyniku?
oczywiście, tak to działa, ale nie mam pojęcia dlaczego :-(
Świetne !, to właśnie szukałem .. Więc siebie we mnie :-) to jest dobre, ale też super we mnie? czy super byłabym superklasą? np. NSObject? – Martin
so self = [super init]; teraz self jest równy mojej super klasie NSObject, lub jej równy mnie, ale tam, gdzie się mylę, pochodzący z tła .net/java. Jeśli zadzwonię do mojej super klasy i zrobię init, to super jest w rzeczywistości nsobject, nie jest to – Martin
@Martin, zaktualizowałem odpowiedź nieco, mam nadzieję, że to wyjaśni. Jeśli masz klasę 'Foo', która dziedziczy' NSObject', to 'Foo' jest także' NSObject' - relacją is-a. 'self' i' super' wskazuje na tę samą pamięć, ale traktuje ją inaczej podczas rozwiązywania. – driis