2009-10-12 8 views
0

c'est un suivi pourr iPhone SDK: loading UITableView from SQLiteiPhone SDK: chargement UITableView de SQLite - tableau création de SQLite

Je prévois d'utiliser le code ci-dessous pour charger des données SQL dans le tableau. Chaque élément du tableau sera une classe représentant chaque entrée de base de données:

@interface Ligne: NSObject { int PK; NSString * desc;

@property int PK; @property (nonatomic, retain) NSString * desc;

@end

l'opération de chargement sera semblable à ceci:

NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:1]; 
Row *myRow = [[Row alloc] init]; 


for (int i=0; i<10; i++) 
{ 
    myRow.PK = i; 
    myRow.desc = [[NSString alloc] initWithFormat:@"Hello: %d", i]; 
    [array addObject:myRow]; 
} 
[myRow release]; 

for (int i=0; i < [array count]; i++) 
{ 
    Row *myNrow = [array objectAtIndex:i] ; 
    NSLog (@"%@ %d", [myNrow desc], [myNrow PK]); 
    myNrow = nil; 
} 

Bien sûr la première boucle sera une boucle d'instruction SELECT. L'autre boucle (ou les éléments de cette boucle) sera dans la méthode cellInRowIndex pour rendre les données.

J'ai une question sur les fuites de mémoire. Est-ce que le code ci-dessus a des fuites de mémoire? La propriété de chaîne decs de la classe Row est déclarée en tant que (retain). Ne devrait-il pas être libéré quelque part?

Merci

Répondre

1

Vous devez libérer la chaîne que vous mettez en myRow.desc. Vous pouvez changer

myRow.desc = [[NSString alloc] initWithFormat:@"Hello: %d", i]; 

soit

myRow.desc = [[[NSString alloc] initWithFormat:@"Hello: %d", i] autorelease]; 

ou

myRow.desc = [NSString stringWithFormat:@"Hello: %d", i]; 

EDIT: Si vous souhaitez utiliser un intermédiaire NSString (comme vous l'avez mentionné dans le commentaire), vous pourriez soit faites-le comme ceci:

NSString *foo = [[NSString alloc] initWithFormat:@"Hello: %d", i]; 
myRow.desc = foo; 
[foo release]; 

ou:

NSString *foo = [NSString stringWithFormat:@"Hello: %d", i]; 
myRow.desc = foo; 

Notez que dans le second exemple foo est déjà autoreleased, de sorte que vous ne devez pas le libérer.

+0

Merci. Ce que j'ai quelque chose comme cette déclaration: NSString * foo; dois-je faire aussi ceci: foo = [NSString initWithFormat: @ "Bonjour% d", i] ou foo = [[[NSString alloc] initWithFormat: @ "Bonjour% d", i] autorelease ] Maintenant, j'ai ceci: foo = [[NSString alloc] initWithFormat: @ "Bonjour% d", d]; ... [foo release] – leon

+0

ESSAYER DE FIXER LE FORMATAGE .... Merci.Ce que j'ai quelque chose comme cette déclaration: NSString * foo; Dois-je aussi faire ceci:

 foo = [NSString initWithFormat: @"Hello %d", i] or foo = [[[NSString alloc] initWithFormat:@"Hello %d", i] autorelease] Now I have this: foo = [[NSString alloc] initWithFormat: @"Hello %d", d]; ... [foo release] 
leon