2009-03-02 5 views
18

Ich möchte einige Methoden in einer Klasse schreiben, so dass andere Klassen diese Methoden mit [instance methodName:Parameter] aufrufen können. Wenn die Klasse eine Unterklasse von UIViewController ist, kann ich initWithNibName verwenden, um sie zu initialisieren. Aber ich möchte die Methoden in einer NSObject Unterklasse schreiben, wie kann ich es initialisieren?Wie initialisiert man die Unterklasse eines NSObjects auf dem iPhone?

Antwort

-2

finde ich arbeiten kann:

TheClass *newObject = [[TheClass alloc] init]; 
//do something here 
[newObject release];
+1

Das ist einfach das Objekt "newObject" als TheClass-Klasse zu initialisieren. Wenn TheClass "- (id) init" nicht mit "[super init]" und "return self;" implementiert, wird Ihre Initialisierung wahrscheinlich fehlschlagen. – Klompengard

57

iphony richtig ist, aber er oder sie nicht sagen, dass Sie der Init-Methode selbst schreiben müssen. Ihre init-Methode sollte in der Regel wie folgt aussehen:

- (id) init 
    { 
    if (self = [super init]) 
     { 
     myMember1 = 0; // do your own initialisation here 
     myMember2 = 0; 
     } 
    return self; 
    } 

Obwohl die apple documentation sagt

Die init-Methode in der Klasse NSObject definiert hat keine Initialisierung; es gibt einfach selbst zurück.

und man kann nur zu schreiben versucht werden folgende

- (id) init 
    { 
    myMember1 = 0; // do your own initialisation here 
    myMember2 = 0; 
    return self; 
    } 

Das ist falsch und nicht das, was ausdrücklich in der Dokumentation angegeben:

In einer benutzerdefinierten Implementierung dieser (init) Methode , müssen Sie Super benannten Initialisierer aufrufen dann initialisieren und das neue Objekt zurückgeben.

MUSS. Nicht sollte, könnte, sollte, etc.

Sie sollten nicht davon ausgehen, NSObjects init wird nicht in Zukunft ändern; noch die Superklasse, von der Ihre benutzerdefinierte Klasse abgeleitet ist.

+0

ist [super init] notwendig? weil die Dokumentation der Init-Methode von NSObject etwas anderes sagt. – santhu

+0

Man sollte niemals Super Init weglassen! Auch wenn es nichts tut. Die Dokumentation sagt explizit: "In einer benutzerdefinierten Implementierung dieser Methode müssen Sie den angegebenen Initialisierer von Super aufrufen und anschließend das neue Objekt initialisieren und zurückgeben." Ich habe die Antwort bearbeitet. – manicaesar