Was ist der Unterschied eine Variable in .h-Datei der Schnittstelle bei der Definition () Methode allein, ohne es zu synthetisieren?
-
09-10-2019 - |
Frage
definiere ich eine Variable in .h Interface-Methode der Datei wie dieses ...
@interface ......{
int a;
}
Dann verwende ich es in .m-Datei, es funktioniert gut ....
i modifiziert auch den Code wie
@interface ......{
int a;
}
@property(nonatomic) int a;
in .h-Datei, und in .m-Datei habe ich den int-Wert als
@synthesize a;
Jetzt auch funktioniert es gut ...
Was ist der Unterschied zwischen den beiden Fällen?
Lösung
Durch Ihre ‚a‘ Eigenschaft deklarieren Sie für die int erlauben in der Klasse gespeichert werden und Sie darauf zugreifen können aus Ihrer Klasse - aber nur in Ihrer Klasse. Wenn Sie wollen, dass es eine Eigenschaft sein, die von anderen Objekten (ein öffentliches Eigentum) zugänglich ist, dann müssen Sie Getter und Setter-Methoden.
Durch sie als @property
in Ihrem .h
erklärt und mit @synthesize
in Ihrem .m
, Sie sind zwei Methoden automatisch zu erstellen:
[myObject a]; // your getter
[myObject setA:50]; // your setter
Eine Sache hier im Auge zu behalten ist, dass es oft eine sehr gute Idee zu sythesised Eigenschaften zu verwenden, auch in Ihrer Klasse, weil sie die Pflege Ihrer Speicherverwaltung nehmen. Zum Beispiel, wenn Sie die @property
als retain
Flagge:
objectProperty = anObject; // just accessing locally, no memory management
self.objectProperty = anObject; // [anObject retain] will be called
self.objectProperty = nil; // [anObject release] will be called
Andere Tipps
Im ersten Fall verwenden Sie Feld, mit direktem Zugang zu ihnen. Im zweiten Fall, dass Sie Objective C Eigenschaft definieren, mit Accessoren.
Wenn Sie definieren und eine Eigenschaft synthetisieren, dann können Sie auch den Wert zugreifen int value = self.a; self.a = newValue;
verwenden. Dies macht auch die Variable zugänglich zu anderen Objekten. Ohne die Eigenschaft können Sie verwenden, um den self.
nicht auf die Variable zu erhalten, und es gibt keine automatische Art und Weise für andere Objekte, um es zu erhalten.
Wenn Sie definieren und synthetisieren, eine Eigenschaft, die Sie Compiler sagen sowohl Ivar und Zugriffsmethoden zu erzeugen (- (int) ein; und - (void) setA: (int) a_;) für sie. Diese Methoden aufgerufen werden können explizit oder implizit Punkt Syntax:
self.a = num; // [self setA:num] gets called