Ein Buch für über iPhone-Programmierung diese Klassen wie instanziiert:alloc, init, und neu in Objective-C
[[Class alloc] init]
Ein weiteres Buch über Objective-C tut es dies wie:
[Class new]
Was ist der Unterschied?
Ein Buch für über iPhone-Programmierung diese Klassen wie instanziiert:alloc, init, und neu in Objective-C
[[Class alloc] init]
Ein weiteres Buch über Objective-C tut es dies wie:
[Class new]
Was ist der Unterschied?
Ursprünglich in Objective-C wurden Objekte mit neuen erstellt. Als sich das OpenStep/Cocoa-Framework entwickelte, entwickelten die Designer die Meinung, dass das Zuweisen des Speichers für ein Objekt und das Initialisieren seiner Attribute getrennte Anliegen sind und daher getrennte Methoden sein sollten (zum Beispiel könnte ein Objekt in einer bestimmten Speicherzone zugeordnet sein). So kam der Alloc-Init-Stil der Objekterstellung in Frage.
Grundsätzlich ist neu alt und fast - aber nicht ganz veraltet - Sie werden also sehen, dass Cocoa-Klassen viele Init-Methoden haben, aber fast nie neue benutzerdefinierte Methoden.
Können Sie zeigen oder anführen, wo + neu ist "fast, aber nicht ganz veraltet". Ich hätte gerne die Informationen, bevor ich mit Kollegen diskutiere. – acarlow
Ich benutze es als eine Abkürzung, wenn alles, was ich tun will, 'Alloc' /' init' aufrufen soll. – Rivera
Was ist mit [NSMutableDictionary Wörterbuch]; – abhi1992
Es hängt von der Klasse ab, aber [Class new]
ist höchstwahrscheinlich eine Komfortmethode, die intern [[Class alloc] init]
aufruft. Daher können Sie keine anderen Init-Methoden wie "initWithString" aufrufen.
"Alloc" erstellt einen neuen Speicherort, aber initialisiert es nicht im Vergleich zu "neu". –
Wie bereits erwähnt, gibt es bei defaut keinen Unterschied. Sie können jedoch die Klassenmethode new
überschreiben. Apple's documentation hat einige Gedanken dazu.
Im Gegensatz zu alloc, neuen ist manchmal neu implementiert in Subklassen eine klassenspezifische Initialisierung Methode [...] Oft neue ... Methoden mehr tun berufen als Just Zuweisung und Initialisierung.
Ich sehe den Auszug nicht in Ihrem Link. Könnten Sie bitte Ihre Quelle aufrufen? – acarlow
Offensichtlich hat Apple die Dokumente aktualisiert und diesen Absatz entfernt. Sie können Kopien von älteren Versionen im Internet finden (nicht sicher über das Urheberrecht ...) – user123444555621
+new
implementiert wahrsten Sinne des Wortes als:
+ (id) new
{
return [[self alloc] init];
}
Nichts mehr, nichts weniger. Klassen können es überschreiben, aber das ist sehr untypisch für etwas wie +fooWithBar:
.
Was ist mit '[NSMutableDictionary Wörterbuch];' – abhi1992