Question sur @property
paddev
Membre
Bonjour,
J'ai une question sur la déclaration des objets.
Dans mon fichier .m je declare une image (par exemple)
UIimageView *imageFond=[[UIImafeView alloc) initwithFrame:.....];
imageFond.image=[UIimage imageNamed....];
[self.view addSubview:image];
Dans le .h dois je déclarer ceci:
UIimageView *imageFond;
ou rajouter:
@property(nonatomic, retain) UIimageView *imageFond;
je comprend pas bien l'interet de @property .
Dans ce cas je dois specifier dans le dealloc et viewdidUnload: imageFond=nil ?
bref quelle est l'utilité de @property si on alloc l'image dans le fichier .m
merci
J'ai une question sur la déclaration des objets.
Dans mon fichier .m je declare une image (par exemple)
UIimageView *imageFond=[[UIImafeView alloc) initwithFrame:.....];
imageFond.image=[UIimage imageNamed....];
[self.view addSubview:image];
Dans le .h dois je déclarer ceci:
UIimageView *imageFond;
ou rajouter:
@property(nonatomic, retain) UIimageView *imageFond;
je comprend pas bien l'interet de @property .
Dans ce cas je dois specifier dans le dealloc et viewdidUnload: imageFond=nil ?
bref quelle est l'utilité de @property si on alloc l'image dans le fichier .m
merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Dans ton exemple c'est pas utile de déclarer une property car tu crées une variable locale, si tu veux mettre une property tu peux faire:
J'ai mis un autorelease ici car ta property est en mode retain, c'est à dire qu'elle va faire un retain sur l'objet que tu lui passes, donc sans l'autorelease ça ferait un leak mémoire.
en fait si je declare un: uilabel=[uilabel alloc...]
puis que j'utilise la syntaxe pointé , dois je declarer @property ou cela ne sert a rien
Donc si j'ai compris on utilise @property que si on se sert de UIlabel dans un autre fichier?
Autre chose en utlisant @property et alloc cela fais 2 retain non?
dois je aussi declarer UIlabel=nil dans dealloc et dans viewdidunload?
Merci
Lis la documentation:
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html
merci.
un oubli d'un @property peut il causer un leak?
@property (nonatomic, readonly) BOOL isABoolValue;
Tu devrais lire le lien de ldesroziers.
Et puis faut faire gaf à ce que tu mets, dans tes property tu ne mets pas de retain sur les objets, à toi de bien gérer la mémoire et de faire des retain quand besoin.
Comme tu dis le savoir, le property va simplement redéfinir les getter/setter en fonction des paramètres précisés dans le @property.
Donc à moins de redéfinir ces derniers fais bien attention à la gestion de la mémoire.
Donc oui un property sans "retain", et ensuite une gestion de passage de variable ou autre sans toi mettre aVar = [maVar retain], peut entraà®ner un LEAK !
'fin tout dépend aussi de l'objet qui va utiliser la property (s'il fait un retain ou un release dessus...).
bref, lis le lien de ldesroziers...
Un oubli de retain a plus de chance de provoquer un crash (objet détruit trop tôt) qu'un leak...
Oui, mais comme il utilise ARC il n'a pas besoin de s'occuper du retain. D'ailleurs la syntaxe dont il se sert :
gère automatiquement le retain et le release sur la donnée maMapView.
Si j'ai bien compris, nul besoin de mettre à nil les iVars d'une classe. ARC s'occupe de tout comme un grand.
C'est particulier avec les ViewControllers qui peuvent allouer et désallouer momentanément des objets en réponse à une demande de l'OS. Dans ce cas, le développeur doit gérer manuellement l'effacement des objets pour récupérer de la place, en les mettant à nil dans le viewDidUnload.
J'ai bon, là ?
perso je les ai mis car dans mon fichier.m j'utilise la notation pointé..
Quelqu'un peut regarder mes fichiers en me disant ce que je peux enlever ou mettre? voir si j'ai bien implenté le viewdidunload et si mes property sont utiles?
merci
Je te conseille d'utiliser la recherche sur les forums, on a déjà parlé de ça.