2012-04-07 9 views
1

Objective C-Spezifikation (von Apple) Seite 49 heißt es, dass Jede Klasse, die eine Instanzvariable deklariert muss eine init-Methode sieiOS - Warum ist init notwendig und andere init Fragen

Meine Fragen initialisieren bieten - Warum ist das notwendig? Initiiert NSObject die iVars nicht für eine Instanz?

Sollte man init als Konstruktor denken.

Muss init init aufgerufen werden? Kann ich tun id anObject = [[SomeClass alloc] foo];

Muchas Gracias.

Antwort

0

Die init-Methode ähnelt einem Konstruktor, wird aber nicht automatisch aufgerufen. Du musst es selbst anrufen.

Es "Init" zu nennen ist eine allgemeine Konvention, aber keine Voraussetzung.

0

Der Standardwert init von NSObject berührt Ihre Instanzvariable nicht. Die Anweisung aus der Spezifikation bedeutet, dass Sie, wenn Sie Objekte wie NSString *str oder NSDate *d Objekte als Instanzvariable der Klasse verwenden, für die Initialisierung verantwortlich sind. Und dies geschieht typischerweise in init, obwohl Sie sie in anderen Methoden initialisieren können.

Und ja, Sie können [[SomeClass alloc] foo] ein Objekt zurückgeben.

+0

'-foo' wäre nicht ein statische Methode, wenn 'alloziert 'eine Instanz dieser Klasse zurückgibt ... –

+0

@ RichardJ.RossIII ah, ja, danke für die Erklärung. –

0

Klassen wissen normalerweise nicht über die Interna ihrer Unterklassen und NSObject unterscheidet sich nicht auf diese Weise.

alloc + ist wie ein Konstruktor, außer dass die Verkettung nicht automatisch ist.

Es muss nicht init genannt werden, aber mit init starten ist fast universell. Zum Beispiel:

- (id)initWithString:(NSString *)string { 
    self = [super init]; 
    if (self) { 
     self.myString = string; 
    } 
    return self; 
} 
0

Erstens ist es nicht notwendig. init wird verwendet, um Eigenschaften der Instanzvariablen zu initialisieren. Sie erwecken nicht die Init, die in Ordnung sein wird, wenn Sie Ihre eigene Klasse verwenden. Meiner Meinung nach alloc entspricht der constructor. Durch ein sehr einfaches Beispiel habe ich den Grund.Wenn wir Singleton Muster verwenden möchten, ist es sehr einfach zu Komplement in Java oder andere Programmiersprache mit constructor .Es ist auch einfach in Object C oder IOS in Objekt c, obwohl es keinen eindeutigen Konstruktor.In Apples offiziellen Beispiel finden Sie, dass sie nur die allocWithZone in NSObject und der Allo wird neu schreiben evoce it finally.So ich denke, die alloc ist der Konstruktor in Objekt C.Wie auch immer ich denke, Sie sollten besser die init.It ist Konvention oder Standard.So das Buch verwenden Sie das Wort must. Egal was Programmiersprachen Initialisierung sein muss done.Just Apple betonen es ausdrücklich