Keine Ivars - Was fehlt mir?

8

Ich benutze nie Ivars. Ich verwende nur Eigenschaften - manchmal Eigenschaften mit primitiven Typen zuweisen, und manchmal auf einem - Ich habe die Vorteile der Verwendung von Ivars beim Wechsel zu ARC gesehen - ich habe etwas geliehenen Code mit vielen Ivars, die ich immer noch nicht "ARC" kann, da ich nicht weiß, was ich behalten muss. So kenne ich einige Vorteile von nicht mit Ivars, aber was sind die Vorteile der Verwendung von Ivars anstelle von Eigenschaften?

Hinweis: Ich bin ausschließlich auf die Ivars angewiesen, die automatisch (durch den Compiler?) für die Eigenschaftsdeklaration hinzugefügt werden.

Nicht zum Schließen markieren: Ich habe mir einige der anderen Fragen angeschaut, wie zB dies und dies und keines traf die Stelle. Die Titel sehen gut aus, aber wie so viele Fragen zu SO, sind die Fragen eine Mischung aus seltsamen Zweifeln und anderen Dingen.

    
Dan Rosenstark 14.09.2011, 15:22
quelle

3 Antworten

4

Deklarierte Eigenschaften können nicht wie ein @protected ivar behandelt werden. Sie können die Eigenschaft in einer Klassenerweiterung deklarieren, um sie für alle anderen Klassen privat zu halten, oder sie in der Header-Schnittstelle deklarieren, um sie öffentlich zugänglich zu machen. Sie kann jedoch nicht nur für Unterklassen zugänglich gemacht werden. Dies würde die Ivar-Deklaration erfordern.

BEARBEITEN

Nur noch ein kurzer Gedanke. Ich habe kürzlich viele Framework-Klassen geschrieben, und ich denke, es könnte etwas über die Verwendung von iVars als Dokumentation gesagt werden.

Angenommen, Sie rufen einen Code in einer engen Schleife an und möchten sicherstellen, dass er performant ist. Innerhalb dieser engen Schleife möchten Sie auf eine Eigenschaft einer Klasse zugreifen, müssen aber wissen, ob der Rückgabewert bei jedem Aufruf sofort berechnet oder in einem iVar gespeichert wird. Wenn Sie den iVar in der Kopfzeile sehen, können Sie schnell sicherstellen, dass Sie diese Variable ohne großen Aufwand zurückbekommen.

    
Stuart 15.09.2011, 12:54
quelle
3

Ich sehe keinen Grund, iVars zu verwenden, wenn Sie es nicht müssen. Wenn Apple und der Compiler für Sie arbeiten wollen, sage ich, lassen Sie sie. Sie haben einen Code, der effizienter und einfacher zu verwalten ist. An diesem Punkt sind iVars Legacy-Code.

    
SSteve 14.09.2011 16:00
quelle
1

Ein guter Grund für mich: ein nerviger GCC-Fehler, siehe diese andere Frage für eine Beschreibung.

Wenn Sie Clang / LVVM verwenden, müssen Sie sich keine Gedanken über diesen Fehler machen.

    
jv42 15.09.2011 13:13
quelle