Erstellen von privaten Eigenschaften in Objective-C

8

In Objective-C gibt es eine Art hackischen Weg, um private Methoden in der .m-Datei zu erstellen:

%Vor%

Das funktioniert großartig für Methoden. Ich habe versucht, das gleiche mit einer Eigenschaft zu tun:

%Vor%

Dies brachte eine Kompilierungswarnung: Die in der Kategorie 'PrivateMethods' deklarierte Eigenschaft kann nicht in der Klassenimplementierung implementiert werden. Ich habe versucht, mein Eigentum in eine Kategorie zu verschieben:

%Vor%

Dann: @synthesize is not allowed in a category's implementation.

Die offensichtliche Antwort lautet: "Versuche aufzuhören, benutze nur Ivars", aber ich habe von Leuten bei Apple erfahren, dass sie (persönlich) dazu übergegangen sind, Eigenschaften vollständig zu verwenden. Die Sicherheit, die sie bringen (wie Sicherheit an einer Waffe, härter, sich selbst in den Fuß zu schießen) macht mich innerlich glücklich, also gibt es irgendeinen Weg, dies zu tun, ohne auf nackte Ivars zurückgreifen zu müssen?

    
wjl 08.07.2011, 19:50
quelle

2 Antworten

16
___ tag123objectivec ___ Dieses Tag sollte nur bei Fragen verwendet werden, die sich auf Objective-C-Features beziehen oder von Code in der Sprache abhängen. Die Tags [Kakao] und [Kakao-Touch] sollten verwendet werden, um nach Frameworks oder Klassen von Apple zu fragen. Verwenden Sie die zugehörigen Tags [ios], [macos], [apple-watch] und [tvos] für Probleme, die für diese Plattformen spezifisch sind. ___ qstnhdr ___ Erstellen von privaten Eigenschaften in Objective-C ___ tag123private ___ Private ist eine Art der Kapselung in der objektorientierten Programmierung. ___ tag123properties ___ Eine Eigenschaft in einigen objektorientierten Programmiersprachen ist eine spezielle Art von Klassenmember, die zwischen einem Feld (oder Datenelement) und einer Methode liegt. Eigenschaften werden wie Felder gelesen und geschrieben, aber Lese- und Schreibvorgänge für Eigenschaften werden (normalerweise) übersetzt, um Methodenaufrufe zu erhalten und festzulegen. ___ antwort6629748 ___

Verwenden Sie anstelle einer Kategorie eine Klassenerweiterung (Beachten Sie das Fehlen eines Kategorienamens innerhalb der Klammern):

%Vor%

Sie können diese Frage (und die Antworten) auch lesen: Erstellt eine private @property eine @private-Instanzvariable?

    
___ qstntxt ___

In Objective-C gibt es eine Art hackischen Weg, um private Methoden in der .m-Datei zu erstellen:

%Vor%

Das funktioniert großartig für Methoden. Ich habe versucht, das gleiche mit einer Eigenschaft zu tun:

%Vor%

Dies brachte eine Kompilierungswarnung: Die in der Kategorie 'PrivateMethods' deklarierte Eigenschaft kann nicht in der Klassenimplementierung implementiert werden. Ich habe versucht, mein Eigentum in eine Kategorie zu verschieben:

%Vor%

Dann: %code%

Die offensichtliche Antwort lautet: "Versuche aufzuhören, benutze nur Ivars", aber ich habe von Leuten bei Apple erfahren, dass sie (persönlich) dazu übergegangen sind, Eigenschaften vollständig zu verwenden. Die Sicherheit, die sie bringen (wie Sicherheit an einer Waffe, härter, sich selbst in den Fuß zu schießen) macht mich innerlich glücklich, also gibt es irgendeinen Weg, dies zu tun, ohne auf nackte Ivars zurückgreifen zu müssen?

    
___ answer6629753 ___

Das habe ich gemacht und es funktioniert für mich. Die Änderung besteht darin, dass Sie keine Kategorien mehr erstellen. Stattdessen erstellen Sie Erweiterungen der Klasse selbst.

%Vor%     
___
user557219 08.07.2011, 19:54
quelle
4

Das habe ich gemacht und es funktioniert für mich. Die Änderung besteht darin, dass Sie keine Kategorien mehr erstellen. Stattdessen erstellen Sie Erweiterungen der Klasse selbst.

%Vor%     
Alexsander Akers 08.07.2011 19:54
quelle

Tags und Links