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
Antwort
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.
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.
Wie gehst du elegant vor, dass keine Init-Methode für das Objekt aufgerufen wurde? – jbat100
- 1. Aufruf von BeforeShowDay mehrmals
- 2. PHP-Datenbank-Verbindung - Aufruf mehrmals
- 3. AMF0 Parser in ObjectiveC
- 4. ObjectiveC-Blöcke Java-Äquivalent
- 5. 2D Dynamische Speicherzuweisung - ObjectiveC
- 6. ng-change on 'range' Eingabe Aufruf mehrmals in chrome
- 7. ObjectiveC: Wo private Instanzeigenschaften deklarieren?
- 8. ObjectiveC - wie NSUserNotification Kennung Eigenschaft
- 9. Präsentieren Sie kleine ModalViewController ObjectiveC
- 10. ObjectiveC - Anzeigefenster durch verteilte Objekte
- 11. Aufruf von $ wakanda.init mehrmals von verschiedenen Angular Controllern
- 12. Winkelversprechen mehrmals
- 13. Aufruf der gleichen Methode mehrmals auf verschiedenen Teilen des Arrays
- 14. Aufruf der gleichen Methode mehrmals mit verschiedenen Rückgaben mit MOQ
- 15. TwitPic API von ObjectiveC/iPhone verwenden
- 16. Wie mehrmals in docopt
- 17. Wie sqlsrv_fetch_array (..) mehrmals aufrufen?
- 18. ScheduledExecutorService Start Stop mehrmals
- 19. SwingWorker mehrmals ausführen
- 20. UIImage codiert in NSData in ObjectiveC und dann in Swift
- 21. Registrieren einen Skript mehrmals
- 22. ObjectiveC - Freigabe von Objekten als Parameter
- 23. Stoppfunktion wird mehrmals aufgerufen
- 24. Wie überprüfen Sie mehrmals mehrmals die Anweisung
- 25. ObjectiveC UISwitch Standard auf OFF setzen
- 26. Session_Start Brennen mehrmals
- 27. Aktionsmethode, die mehrmals aufgerufen wird
- 28. Datei schreiben trigerring mehrmals in Wordpress shortcode?
- 29. Kann ich einen ObjectiveC @selector in ein NSDictionary einfügen?
- 30. Wie Frame von UIView geschachtelt in UIView bekommen - ObjectiveC
Nein, Sie können nicht davon ausgehen, dass der Initialisierer eines Objekts keinen Speicher zuweist. Warum willst du das überhaupt? –
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
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. –