Je suis un peu confus sur les propriétés et les variables d'instance en Objective-C.
Je suis environ à mi-chemin par le biais de Aaron Hillegass "Cacao de Programmation pour Mac OS X" et tout est logique. Vous pouvez déclarer une classe à quelque chose comme ceci:
@class Something;
@interface MyClass : NSObject {
NSString *name;
NSArray *items;
Something *something;
IBOutlet NSTextField *myTextField;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSArray *items;
Depuis d'autres objets ont besoin de manipuler nos
name
etitems
variables d'instance, nous utilisons@property
/@synthesize
pour générer les accesseurs/mutateurs pour eux. Dans notre classe, nous n'avons pas utiliser les accesseurs/mutateurs-nous seulement d'interagir avec la variable d'instance directement.something
est juste une variable d'instance que nous allons utiliser dans notre classe, et depuis personne ne doit l'utiliser, nous ne créons pas une paire de accesseurs et des mutateurs.Nous avons besoin d'interagir avec un champ de texte dans notre INTERFACE utilisateur, de sorte que nous déclarer
IBOutlet
pour, connecter, et nous y sommes.
Tout est très logique.
Cependant, dans l'iPhone monde, les choses semblent différentes. Les gens déclarent propriétés pour chaque variable d'instance, de déclarer des biens pour IBOutlets
, et l'utilisation des accesseurs/mutateurs pour interagir avec les variables d'instance au sein de la classe (par exemple, ils écriraient [self setName:@"Test"]
plutôt que d' name = @"Test"
).
Pourquoi? Ce qui se passe? Ces différences propres à l'iPhone? Quels sont les avantages de déclarer des propriétés de toutes les variables d'instance, de déclarer les propriétés de IBOutlets
, et l'utilisation des accesseurs/mutateurs au sein de votre propre classe?