2009-10-08 7 views
2

Je ne sais pas pourquoi Instruments montre le code suivant comme une fuite de 128 octets sur la ligne UILabel initWithFrame:Instruments montrant une fausse fuite?

self.navigationItem.leftBarButtonItem = self.editButtonItem; 
UILabel *tmp = [[UILabel alloc] initWithFrame:CGRectMake(25, 100, 275, 100)]; 
self.emptyMsg = tmp; 
[tmp release]; 

Notez que dans ce cours publie la propriété emptyMsg dans les domaines suivants:

-(void) dealloc { 
    [self.emptyMsg release]; 
    [self.pathToUsersFriendsFile release]; 
    [super dealloc]; 
} 

À un moment donné, je n'utilisais pas la méthode accessor pour définir emptyMsg, donc je m'attendais à ce que la modification de cette fuite disparaisse. Hélas, il apparaît toujours. Est-ce que quelqu'un peut me diriger vers une autre cause?

Déclaration de la variable:

@interface FriendListViewController : UITableViewController <AddFriendDelegate> { 
    NSString *pathToUsersFriendsFile; 
    UILabel *emptyMsg; 
} 
@property(retain) UILabel *emptyMsg; 
@end 
+0

Ce n'est probablement pas votre problème, mais vous ne devriez jamais utiliser la syntaxe point sur self dans une méthode dealloc. –

+0

S'il vous plaît signaler la déclaration de la propriété pour emptyMsg – zakovyrya

+0

@rich que diriez-vous d'attribuer nil aux propriétés dans dealloc? – adib

Répondre

1

Il n'y a rien de mal avec la façon dont vous l'avez fait. (Bien que je prendrais les conseils de Rich et pas utiliser la syntaxe point dans la méthode dealloc, libère les variables d'instance à la place.) Les instruments ne doivent pas être confondus par elle, mais des instruments est pas parfait. S'il insiste sur le fait qu'il s'agit d'une fuite de mémoire, c'est un faux positif.

+0

Y at-il vraiment rien de mal de cette façon? Je suis un novice à Objective-C, donc je ne suis pas sûr de cela, mais quand il émet [self.emptyMsg release], la syntaxe point n'appelle-t-elle pas la méthode setter de telle sorte que le nombre de retain augmente de un? L'effet de cette déclaration serait alors d'augmenter le nombre de retenue de un et de le diminuer sur une ligne, n'est-ce pas? – ustun

+0

Non. Cela équivaudrait à écrire [[self videMsg]]. Cela appellerait le getter, pas le setter. – Alex

+0

Ah, OK, merci. – ustun

Questions connexes