Je construis un tableau de dictionnaires (appelés touches) dans mon application iphone pour contenir les noms de section et les comptes de lignes pour une vue de table.Classe de collecte efficace de mémoire
le code ressemble à ceci:
[self.results removeAllObjects];
[self.keys removeAllObjects];
NSUInteger i,j = 0;
NSString *key = [NSString string];
NSString *prevKey = [NSString string];
if ([self.allResults count] > 0)
{
prevKey = [NSString stringWithString:[[[self.allResults objectAtIndex:0] valueForKey:@"name"] substringToIndex:1]];
for (NSDictionary *theDict in self.allResults)
{
key = [NSString stringWithString:[[theDict valueForKey:@"name"] substringToIndex:1]];
if (![key isEqualToString:prevKey])
{
NSDictionary *newDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:i],@"count",
prevKey,@"section",
[NSNumber numberWithInt:j],
@"total",nil];
[self.keys addObject:newDictionary];
prevKey = [NSString stringWithString:key];
i = 1;
}
else
{
i++;
}
j++;
}
NSDictionary *newDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:i],@"count",
prevKey,@"section",
[NSNumber numberWithInt:j],
@"total",nil];
[self.keys addObject:newDictionary];
}
[self.tableview reloadData];
Le code fonctionne très bien la première fois à travers mais je dois parfois reconstruire toute la table, donc je refais ce code qui Orks bien sur le simulateur, mais sur mon appareil le bombes programme quand j'exécute la ligne reloadData:
malloc: *** mmap(size=3772944384) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
malloc: *** mmap(size=3772944384) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Program received signal: “EXC_BAD_ACCESS”.
Si je supprime la reloadData Tapisser le code fonctionne sur l'appareil. Je me demande si cela a quelque chose à voir avec la façon dont j'ai construit le tableau de clés (c'est-à-dire en utilisant des chaînes et des dictionnaires auto-libérés).
+1 pour les questions d'utilisabilité –
les chaînes sont très petites et il y a environ 500 lignes dans la table. Je vais essayer le point d'arrêt ... – Joe
OK - cela peut être un cas de fuites au fil du temps, aussi. Ou il peut s'agir d'un objet sur-relâché qui amène alors quelqu'un à demander un malloc ridicule(). Zombies & the Allocations vous aidera probablement beaucoup aussi. – bbum