• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

bitte um erklärung eines codes ( objective C )

megge

Braeburn
Registriert
06.09.08
Beiträge
44
man ich liebe dieses forum hab garnich gefragt das ich so viel fragen kann
also

bookname und book sind instance variablen

-(id) initWithName: (NSString *) name
{
self = [super init];

if (self)
{
bookName = [[NSString alloc] initWithString: name]; // is klar
book = [[NSMutableArray alloc] init]; // auch klar
}

return self;
}

---------

self = [super init];
if (self)
{
...
}
return self; // giebt nen id object zurück is dann das fertige objekt

danke für posts
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Kann es sein, dass Du die Frage vergessen hast? ;) Was ist denn noch unklar?

MacApple
 

megge

Braeburn
Registriert
06.09.08
Beiträge
44
aso ja sry

self = [super init];
if (self)
{
...
}
return self;

der teil ist unklar
ist self ne variable , wenn ja warum wird sie nicht definiert mit irgendwie id self weil id wird ja zurückgegeben
if (self) glaub ich prüft ob das init geklappt hat
return self; // ??
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
self ist einer von zwei versteckten Parametern, die jeder Methode übergeben werden. self ist ein Zeiger auf das Objekt selbst. Details kannst Du hier nachlesen.

MacApple
 

megge

Braeburn
Registriert
06.09.08
Beiträge
44
ähm ok iwie verteh ichs nicht ganz :S

self = [super init]
ist dann ein pointer auf den geallocten bereich init is ja immer das selbe
if (self)
testet dann ob der geallocte bereich wirklich geinited worden ist.
und return self giebt dann den id pointer zurück?
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
self ist ein impliziter (nicht explizit definierter) Zeiger auf das Objekt, welches gerade die Methode ausführt. In der Kette
irgendwer = [[Klasse alloc] init];
wird von dem +alloc der Speicherplatz für das Instanzobjekt erzeugt. Außerdem setzt +alloc etwa die Variable isa, die den Typen des Instanzobjektes bestimmt und löscht die anderen Eigenschaften des Instanzobjektes.

Ab diesem Zeitpunkt haben wir also hinter dem Instanzzeiger, ein Instanzobjekt, welches gültig ist, aber noch nicht seine spezifische Initialisierung erhielt. Deshalb wird an dieses Objekt -init… geschickt. Wie bei jeder Methode wird dabei (heimlich) der Parameter self übergeben, der eben auf das halbfertige Objekt zeigt. Da die Initialisierung des Objektes aber auf jeder Ebene der Ableitungshierarchie erfolgen muss (NSObject weiß, wie NSObject-Instanzen initialisiert werden, MyClass weiß, wie MyClass-Instanzen initialisiert werden, MySubclass weiß, wie MySubclass-Instanzen initialisiert werden usw.) muss zunächst der höheren Ebene initialisiert werden. Daher beginnt die Initialisierung fast immer mit einem -init… (super).

Da für bestimmte Situationen die Initialisierung das bereits halbfertige Objekt wieder verwerfen kann, ist jeder Initialisierer berechtigt, dieses zu verwerfen und ein neues Objekt zurückzugeben. Daher muss der Rückgabewert wieder an self zurückgegeben werden.

Wird self dabei nil, bedeutet das, dass bei der Initialisierung etwas falsch gelaufen ist. Eine weitere Initialisierung in der Subklasse ist dann müßig bis gefährlich. Daher das if.

Preisfrage: Worauf zeigt self in +alloc?
 

megge

Braeburn
Registriert
06.09.08
Beiträge
44
ah ok danke etz versteh ichs
(also preisfrage nich aber is ja anderer thread ;> )