1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

bitte um erklärung eines codes ( objective C )

Dieses Thema im Forum "OS X-Developer" wurde erstellt von megge, 06.09.08.

  1. megge

    megge Braeburn

    Dabei seit:
    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
     
  2. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Kann es sein, dass Du die Frage vergessen hast? ;) Was ist denn noch unklar?

    MacApple
     
  3. megge

    megge Braeburn

    Dabei seit:
    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; // ??
     
  4. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    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
     
  5. megge

    megge Braeburn

    Dabei seit:
    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?
     
  6. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    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?
     
  7. megge

    megge Braeburn

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

Diese Seite empfehlen