2010-11-28 4 views
0

J'ai NSMutableArray * cityData que je remplis avec des objets LocationDetail personnalisés. cityData est créé dans viewDidLoad et publié dans dealloc. Quelque part dans le code, en fonction des actions de l'utilisateur, je POPULATE LocationDetail et l'ajouter à un tableau cityData:Problème de gestion de la mémoire avec NSString

LocationDetail* d = [[LocationDetail alloc] init]; 
    d.city = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 1)]; 
    d.tz = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 3)]; 
    d.country = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 2)]; 
    d._id = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 0)]; 

    [cityData addObject:d]; 
    [d release]; 

Quand je suis fini avec le contrôleur de la vue et le supprimer, Fuites utilitaire dit que j'ai une fuite dans le code ci-dessus dans NSCFString dans les 4 lignes avec [NSString stringWithFormat] ci-dessus.

J'essayé d'enlever les trucs sqlite3 et simplifié l'appel à quelque chose comme

d._id = [NSString stringWithFormat:@"%s", "a string"] 

avec le même résultat. Toutefois, si je remplace le NSString stringWithFormat comme ceci:

d._id = @"a string"; 

la fuite s'en va. Je me demande pourquoi il y a une fuite si j'utilise stringWithFormat, mais pas si j'utilise @ "something". Y at-il quelque chose d'évident que je me trompe?

Merci!

+0

Afficher comment vous avez défini chaque @ propriété ('city',' tz', 'country' et' _id') pour 'LocationDetail' –

+0

Les propriétés de LocationDetail sont toutes NSStrings * et ont défini son chemin: @property (non atomique, conserver) NSString * _id; – MirekE

+0

@interface LocationDetail: NSObject { NSString * ville; NSString * tz; NSString * pays; \t NSString * _id; } @property (nonatomic, retain) NSString * ville; @property (nonatomic, retain) NSString * tz; @property (nonatomic, retain) NSString * pays; @property (nonatomic, retain) NSString * _id; @end – MirekE

Répondre