2010-02-23 3 views
1

Je ne vérifie généralement pas le nombre de retenues avant que le programme ne fuie. Mais aujourd'hui (je donno y) j'ai vérifié le compte de retenue et maintenant je suis confus.Conserver le compte après appel de fonction. dois-je m'inquiéter?

NSString *strErrorMessage; 
    strErrorMessage= [NSString stringWithFormat:@"Email and Password are mandatory"]; 
      NSLog(@"%d", [strErrorMessage retainCount]); // retain count 1 
    [objAppDelegate ShowMesssage:strErrorMessage]; 
    NSLog(@"%d", [strErrorMessage retainCount]); // retain count 3 
    return; 

Je ne comprends pas. Comme je n'attribue pas strErrorMessage, je dois le libérer rite?

qui possède le propriétaire de strErrorMessage.

-(void) ShowMesssage: (NSString *)strError 
{ 
UIAlertView *alertError = [[UIAlertView alloc] initWithTitle:strTitle message:strError delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[alertError show]; 
[alertError release]; 
    } 

Dois-je libérer strError ici? (Je pensais pas, mais ce nombre vers le retenir 3).

Répondre

1

La vérification du nombre de rétention n'est généralement pas un bon moyen de déboguer des fuites de mémoire, donc je ne m'en soucierais pas tant que vous comprenez où vous allouez/libérez de la mémoire. Ici, vous autoreleasing le message d'erreur et publiant le alertError manuellement, donc je pense que vous allez bien. Je suppose que les deux retenues supplémentaires sont dans le UIAlertView. Il va falloir conserver la chaîne de message d'erreur au moins une fois pour fonctionner correctement. La seconde retenir est probablement juste un détail d'implémentation interne.

+1

En outre, les retenues supplémentaires peuvent être traitées par une autorelease à un moment donné, même si le nombre de rétention devrait être inférieur, vous ne pouvez jamais être sûr. – deanWombourne

+0

donc je ne devrais pas m'inquiéter de la retaincount droit? devrais-je libérer le string-strErrorMessage après avoir fait l'appel de la fonction dans le premier code? –

+0

aussi il serait utile si vous me dites, qui a la propriété d'une chaîne (variable) si je le passe comme une variable à une fonction? –

Questions connexes