2010-01-01 8 views
7

Was passiert, wenn Sie mehrmals an einem Objekt aufrufen, gibt es versteckte Nebenwirkungen? Können Sie davon ausgehen, dass kein zusätzlicher Speicher zugeordnet ist? Würde etwas gegen eine solche Idee gehen?Aufruf mehrmals in Objective-C

+0

Nein, Sie können nicht davon ausgehen, dass der Initialisierer eines Objekts keinen Speicher zuweist. Warum willst du das überhaupt? –

+1

Ich habe das IB verwendet, um ein Objekt zu erstellen und es mit dem entsprechenden Controller-Ausgang zu verknüpfen. Ich habe beobachtet, dass dieses Objekt initialisiert ist, also angenommen, dass + alloc und -init aufgerufen worden sein müssen. So kam die Frage auf, ob ich das Objekt mit anderen Werten erneut initiieren könnte. – CipherCom

+2

Wenn Sie ein Objekt im Interface Builder instanziiert haben, müssen Sie '-initWithCoder:' überschreiben, da dies anstelle von '-init' aufgerufen wird, da das Objekt in der Nib archiviert wird und für die App verfügbar gemacht werden muss . Alternativ implementieren Sie einfach '-awakeFromNib' und ändern Sie an dieser Stelle die gewünschten Einstellungen. –

Antwort

31

Der Aufruf von -init mehrmals ist nicht definiert, wird nicht unterstützt, und führt zu Fehlern, Abstürzen und anderem unerwartetem Verhalten.

Viele Klassen - NSString, NSArray und NSDictionary, zum Beispiel - eigentlich nicht etwas zuteilen, wenn die +alloc Methode aufgerufen wird. Es ist nicht, bis eine der verschiedenen -init* Methoden aufgerufen werden, dass das Objekt genug Kontext hat, um das effizienteste Mittel herauszufinden, was auch immer Sie fragen.

3

Eine Sache, die ich zu Bills Antwort hinzufügen würde, ist, dass wenn Sie Ihre eigenen -init Methoden schreiben defensiv und nicht davon ausgehen, dass sie nur einmal aufgerufen werden.

+2

Wie gehst du elegant vor, dass keine Init-Methode für das Objekt aufgerufen wurde? – jbat100

Verwandte Themen