Si j'ai une classe , est-ce que j'ai aussi besoin d'alloc / init dans le NsObject CODE> NSOBJECT CODE> PROGRAMMODEL, obtient-elle Alloc / init lorsque je
@property code> et
@synthesize code> d'une autre classe?
Par exemple, dans une classe de programme de programcontrôleur, comme celle-ci
initwithnibname code> ou
ViewDiDload code> ou est Il
ALLOC / INIT CODE> -ÉDEMENT À cause de la propriété
/ synthétisée code>? p> p>
3 Réponses :
Vous devez remplir la propriété manuellement. L'exception est si vous avez une propriété Je trouve que pour afficher les contrôleurs La grande majorité des propriétés sont Si vous avez des propriétés entièrement locales sur le contrôleur d'affichage, un modèle commun consiste à écrire votre propre getter et Setter (plutôt que d'utiliser iboutlet code> que vous avez connectée dans un fichier NIB; qui sera renseigné automatiquement lorsque la pointe est chargée.
iboutlets code> et des propriétés décrivant ce que la vue montrera, et ce dernier cas est généralement Défini par l'objet qui crée le contrôleur d'affichage. Ce sera généralement le cas pour un contrôleur d'affichage qui affiche une vue détaillée pour certains objets. p>
@synthesize code>) et de créer l'objet dans le getter s'il n'existe pas. Ce comportement de chargement paresseux signifie que vous pouvez facilement libérer des ressources dans des conditions de mémoire faible et que vous ne payez que le coût de chargement d'un objet lorsque vous en avez besoin. P>
// simple lazy-loading getter
-(MyPropertyClass*)propertyName {
if(propertyIvarName == nil) {
propertyIvarName = [[MyPropertyClass alloc] init];
// ... other setup here
}
return propertyIvarName;
}
techniquement i> la sortie est nil code> jusqu'à ce que la nib soit chargée, qui (dans le cas de Nswindow / ViewController) n'arrivera pas tant que vous invoquerez
[fenêtre du contrôleur] < / code> ou
[Vue du contrôleur] code>.
Je ne suis pas sûr de la distinction que vous dessinez est ici. J'ai dit "quand la pointe est chargée" ...
@Seamus Oui, je voulais juste clarifier que le chargement de la nib ne se produit pas nécessairement lors de l'initialisation. Je me suis mordu tant de fois en essayant d'accéder aux points de vente qui n'étaient pas là parce que je n'avais pas encore chargé la nibrité.
-1 Il est souvent plus approprié d'attribuer des propriétés dans -Init code>, car
-ViewDidLoad code> peut être appelé plusieurs fois tout au long du cycle de vie de l'objet, et la vue peut ne pas être chargée immédiatement. Une propriété "modèle" devrait définitivement être liée à la durée de vie du contrôleur et non à la vie de la vue.
Le chargement paresseux ne vaut la peine que pour des choses qui utilisent une quantité importante de mémoire, bien sûr;)
Par défaut, toutes les variables d'instance sont égales à zéro. Dans le cas d'objets, cela signifie qu'ils sont nil code>. Si vous souhaitez une valeur initiale dans la propriété, vous devez le mettre dans votre initialisateur /
ViewDidDload Code> Méthode. P>
@Property code> ne déclare que les méthodes Getter / Setter. LI>
-
@synthesize code> ne génère que les accesseurs pour vous. LI>
ul>
Ce ne sont pas automatiquement attribués de valeurs, en dehors de la mémoire étant mise à zéro. De plus, vous devez les définir à nil dans -DeAlloc code> pour éviter une fuite. P>
Cela n'a pas non plus de sens pour "Alloc une propriété". Une propriété d'objet est un pointeur. (Et pensez à ce qui se passe si vous avez une classe de liste liée ...) p>
(N.B.: Les attributs de propriété affectent également la méthode @synthétisée et les propriétés sont également connues de l'exécution; voir class_copypropertylist () et amis.) p>