2009-08-25 7 views
1

J'ai un exemple simple de ce que je ne comprends pas sur la gestion de la mémoire sur l'iPhone:Une autre question de fuite de mémoire iPhone!

- (IBAction)AssignAndReleaseOne :(id)sender { 
    for (int i=0;i<10;i++) { 
     someString = [[NSString alloc] initWithString:@"String Assigned"]; 
    } 
    [someString release]; 
} 

- (IBAction)AssignAndReleaseTen :(id)sender { 
    for (int i=0;i<10;i++) { 
     someString = [[NSString alloc] initWithString:@"String Assigned"]; 
     [someString release]; 
    } 
} 

Je vous attendre à obtenir une fuite de mémoire dans la première méthode parce que j'alloc 10 fois (ou est-ce 11 :) avec une seule version, mais Instruments ne signale aucune erreur?

Suis-je ou les instruments sont-ils corrects?

Merci Chris.

Répondre

2

Vous n'obtiendrez pas une fuite, étonnamment assez. Voir:

Memory issue of NSString

+0

Excellent. Merci. Ahhh - la vie est revenue à une logique simple et agréable :) – Chris

+0

La première fois que je l'ai croisé, ça m'a aussi fait tourner en boucle. D'autant plus que j'essayais de tester comment les fuites de mémoire sont détectées! –

0

Vous devriez recevoir la fuite de mémoire que vous attendez. L'algorithme de détection de fuite des instruments est coûteux à exécuter, il n'est donc exécuté qu'après un certain temps (je pense qu'il est réglé par défaut sur 10 secondes). Vous devrez peut-être laisser l'application fonctionner pendant un moment avant que les instruments ne détectent la fuite.

+0

Oui, merci, je l'avais fait et aussi rafraîchi manuellement. – Chris