2014-08-28 1 views
-1

J'ai la propriété comme ceci: @property (nonatomic, assign, readonly) CGRect frame; dans le fichier example.h, je pense que cette instruction est de dire à une autre classe que la propriété frame est en lecture seule et elle dit aussi que le compilateur n'a pas besoin de synthétiser une méthode setter. est ce droit de dire que la classe elle-même peut utiliser la variable d'instance _frame (le self.frame ne peut toujours pas utiliser) dans le fichier .m? Si oui, y a-t-il une meilleure façon d'utiliser cette variable d'instance _frame? redéclarer cette propriété READWRITE dans l'extension de classe ou redéclarer la variable d'instance dans l'extension de classe comme ceci (j'ai trouvé beaucoup de gars écrivent comme ça, mais je ne comprends pas quel est l'avantage de le faire?):est-il un meilleur moyen d'écrire la propriété dans OC?

@interface example() { 
    CGRect _frame; 
} 
@end 

@implementation example 

ou j'ai juste besoin de ne rien faire?

+0

[Dois-je utiliser une propriété ou une variable d'instance?] (Http://www.bignerdranch.com/blog/should-i-use-a-property-or-an-instance-variable/) – twodayslate

Répondre

0

Ma compréhension de la propriété est la suivante: 1.programme trouve le nom de la propriété dans la classe du récepteur lorsque vous prenez l'opérateur point (.). Comme ceci: tt.frame (exemple * tt = [[exemple alloc] init];)

2.Puis le programme recherche la relation entre le nom de la propriété (liaison avec la méthode synthétisée même nom comme nom de la propriété) et la variable d'instance . Le chemin pour cela est: @synthesize frame = _frame;
(frame est le nom de la propriété, _frame est une variable d'instance.Binding name de la propriété et de la variable d'instance.Si vous ne faites pas cela, le compilateur fournira une variable d'instance (frame, puis modifie cette frame.) lorsque vous choisissez 64 bits environnement.Ou compilateur vous donnera un avertissement, si vous choisissez l'environnement 32 bits)

3.Appel méthode pour la variable d'instance réelle.

+0

Je ne comprends pas que le compilateur fournisse déjà une variable d'instance pour moi, pourquoi devrais-je réécrire la variable d'instance par moi-même dans l'extension de classe? – Joiner

Questions connexes