Ich habe dieses Anfänger-Tutorial Ссылка verfolgt , und ich hatte eine Frage bezüglich dieser Klasse und ihrer Implementierung hier:
%Vor% %Vor%Ich betrachte diesen Initialisierer:
%Vor%Anstatt es so zu schreiben, könnte ich es auch so schreiben:
%Vor%Kann mir jemand den Unterschied sagen? Oder, wenn es nicht wirklich wichtig ist?
Bei der Rückgabe von id
anstelle der Klasse handelt es sich um eine Konvention in Objective-C, mit der Unterklassen diesen Initialisierer überschreiben und ihren Typ zurückgeben können. Zum Beispiel lieferte die array
-Klassenmethode für NSArray
für lange Zeit id
, so dass NSMutableArray
diese Methode überschreiben und ein veränderbares Array zurückgeben konnte, so dass beides möglich war:
Das Problem dabei war, dass Sie auch sagen können:
%Vor% und das würde typecheck. Apple hat instancetype
als neuen Rückgabetyp eingeführt, der die Klasse zurückgibt, in der die instancetype
-Deklaration verwendet wird. Heute gibt die array
-Methode instancetype
zurück, so dass die ersten 2 Beispiele oben typecheck, aber das schlechte Beispiel nicht checkcheck.
Weitere Details finden Sie im NSHipster-Artikel zum Thema .
In diesen Szenarien ist der empfohlene Rückgabetyp instancetype
.
Dies wird in Dokumentation .
Ich glaube nicht, dass es einen Vorteil gibt, abgesehen davon, dass ich eine Initialisierungsmethode wiederverwenden kann (damit meine ich Kopieren / Einfügen), ohne den Rückgabetyp ändern zu müssen.
Es ist eigentlich eine schlechte Methode, die ID tatsächlich zu verwenden, da es keine Kompilierzeitprüfung mit dem ID-Rückgabetyp gibt. Die Konvention besteht darin, instancetype anstelle von id (oder dem Klassennamen) zu verwenden, da es die Vorteile von beiden hat.
Tags und Links objective-c ios