2010-05-19 7 views
0

Pourquoi le code suivant provoque-t-il une fuite de mémoire dans une application iPhone?Définition de tableaux synthétisés provoquant des fuites de mémoire à l'aide de tableaux imbriqués

Tous les objets ci-dessous fuient, y compris les tableaux, les chaînes et les chiffres. Donc, je pense que cela a quelque chose à voir avec la propriété du tableau synthétisé ne libérant pas l'objet lorsque je redéfinis la propriété sur la seconde et la prochaine fois que ce morceau de code est appelé.

Voici le code:

« contrôleur » (ci-dessous) est mon point de vue personnalisée classe contrôleur, que j'ai une référence, et je suis en train avec ce bout de code:

sqlite3_stmt *statement; 
NSMutableArray *foo_IDs = [[NSMutableArray alloc] init]; 
NSMutableArray *foo_Names = [[NSMutableArray alloc] init]; 
NSMutableArray *foo_IDsBySection = [[NSMutableArray alloc] init]; 
NSMutableArray *foo_NamesBySection = [[NSMutableArray alloc] init]; 

// Get data: 
NSString *sql = @"select distinct p.foo_ID, p.foo_Name from foo as p "; 
if (sqlite3_prepare_v2(...) == SQLITE_OK) { 
    while (sqlite3_step(statement) == SQLITE_ROW) { 
     int p_id; 
     NSString *foo_Name; 

     p_id = sqlite3_column_int(statement, 0); 
     char *str2 = (char *)sqlite3_column_text(statement, 1); 
     foo_Name = [NSString stringWithCString:str2]; 

     [foo_IDs addObject:[NSNumber numberWithInt:p_id]]; 
     [foo_Names addObject:foo_Name]; 
    } 
    sqlite3_finalize(statement); 
} 

// Pass the array itself into another array: 
// (normally there is more than one array in each array) 
[foo_IDsBySection addObject: foo_IDs]; 
[foo_NamesBySection addObject: foo_Names]; 

[foo_IDs release]; 
[foo_Names release]; 

// Set some synthesized properties (of type NSArray, nonatomic, 
// retain) in controller: 
controller.foo_IDsBySection = foo_IDsBySection; 
controller.foo_NamesBySection = foo_NamesBySection; 

[foo_IDsBySection release]; 
[foo_NamesBySection release]; 

Merci pour toute aide!

+0

Comment détectez-vous la fuite? – fbrereto

+0

Via l'instrument Leaks. Je commençais à me demander s'il ne voyait pas correctement les fuites. En tout cas, il me manquait les versions dans mon proc de dealloc. Merci. – Webtoad

Répondre

1

Ce code semble correct lors d'un examen rapide.

Afficher le dealloc de votre classe de contrôleur; Où libérez-vous les objets?

+0

C'était tout. J'avais oublié les communiqués de propriété en dealloc. Je pense avoir essayé tant de choses que j'ai manqué l'évidence. Merci! – Webtoad

Questions connexes