Was ist der Unterschied eine Variable in .h-Datei der Schnittstelle bei der Definition () Methode allein, ohne es zu synthetisieren?

StackOverflow https://stackoverflow.com/questions/4643692

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?

War es hilfreich?

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 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top