Das mag als triviale Frage erscheinen.
Aber warum müssen wir beim Deklarieren von Objektvariablen
das Sternchen verwenden?Wie machen wir
%Vor%Was ist die Bedeutung des Sterns, ich meine der Compiler weiß bereits, dass es ein Objekt ist, ich bin mir sicher, dass der Compiler trainiert werden kann, sich nicht darüber zu beschweren. Aber dann wieder, indem ich es weglasse, erhalte ich eine Fehlermeldung "statisch zuweisen Instanz von objective-c Klasse NSObject" Welchen Zweck würde das dienen?
Der Stern ist ein Qualifier für die von Ihnen deklarierte Car-Variable. Es bedeutet, dass Sie einen Zeiger auf ein Auto deklarieren, anstatt ein Auto selbst zu deklarieren. Der Rückgabewert der init-Funktion (und der Alloc-Funktion für diese Angelegenheit) ist ein Zeiger auf ein Auto, nicht auf ein Auto selbst, daher ist dies korrekt.
Mit *
deklarieren Sie einen Zeiger. Das ist wie in C, welches eine Untermenge von ObjC ist. Ohne *
würde die Variable statisch zugewiesen, was für ObjC-Objekte nicht möglich ist (weil die Größe des Objekts zur Kompilierzeit nicht bestimmt werden konnte).
Statisch zugewiesene Variablen werden für primitive C-Typen wie int oder double
verwendet %Vor%Objective-C erfordert, dass alle Objekte dynamisch zugeordnet werden (d. h. auf dem Heap). Der Fehler, den Sie erhalten, zeigt an, dass Sie versuchen, ein Auto-Objekt auf dem Stapel zu erstellen. Indem Sie Mazda als einen Zeiger auf Auto (Car *) statt auf ein Auto deklarieren, erfüllen Sie diese Anforderung.
Dies ist effektiv ein Betrogen von Warum [Objekt doSomething] und nicht [* object doSomething]? , das eine Menge Hintergrundinformationen hat.
Tags und Links objective-c cocoa