@interface:notation Dot, la libération et dealloc
UIImageView *myImageView;
@property (nonatomic, retain) UIImageView *myImageView;
@implementation:
@synthesize myImageView;
- (void)viewDidLoad
{
[super viewDidLoad];
self.myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
}
Quel est le nombre de référence pour myImageView? 2 (1 à partir de alloc, 1 à partir de la notation point conserver) ou 3 (1 à partir de alloc, 1 à partir de la conservation de points, 1 à @property retain)
Ces deux instructions ont-elles le même nombre de références?
self.myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
et
myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
De plus, je suppose que vous les libérer dans @implemenation et méthode dealloc, correcte?
EDIT:
Je n'ai pas la réponse que je voulais, peut-être ma question est vague. Je comprends la notation par points, @property, @synthesize, et comment fonctionne setter et getter. Ce que je ne comprends pas, c'est ce qui arrive quand on utilise soi-même. et sans "moi". concernant le nombre de retenues. J'ai réellement couru la méthode retainCount sur l'objet myImageView et cela confirme mon original, le "self". cas a un nombre de retenue de deux sur le chauve-souris (avec alloc et propriété conservent donc c'est probablement une bonne idée d'utiliser autorelease là). Maintenant, cela conduit à une autre question, si je ne devais pas utiliser autorelease, comment puis-je faire à ce sujet? libérer une fois dans viewDidLoad et une fois de plus dans dealloc entraînerait toujours une fuite de mémoire, non?
self.myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
NSLog(@"retain count dot: %d", [myImageView retainCount]);
2011-05-17 10: 01: 14,915 test [1249: 207] retenir le nombre de points: 2
myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
NSLog(@"retain count: %d", [myImageView retainCount]);
2011-05-17 10: 03: 14,715 test [1278: 207 ] nombre de retenue: 1
Ne considérez pas les valeurs de retenue comme des valeurs absolues; pensez-y comme des deltas. C'est à dire. "' alloc' donne un objet w/compte de référence +1 "," 'self.myImageView = aView' ajoute un au nombre de références", "' release' décrémente le nombre de retenue par un "..... – bbum
@bbum , compris, mais ce que j'essaie de saisir, ce sont les différences lors de l'utilisation de l'évaluateur de la propriété et ivar directement. Est-ce que je dois encore libérer les deux dans viewDidLoad (puisque j'alloue là-bas), et le relâcher à nouveau dans dealloc parce que c'est une propriété retain. – s2000coder
Comptez les retenues que vous causez et équilibrez chacune d'elles avec un dégagement; '+ alloc 'est un, l'affectation à la propriété via le setter est une autre ... donc, oui, vous avez besoin de deux versions ou autoreleases. C'est aussi simple que ça Si vous conservez, vous devez libérer. – bbum