我在我的iphone应用程序中构建一个字典数组(称为键),以保存tableview的段名称和行数。内存有效的集合类
的代码如下所示:
[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];
代码通过正常工作第一次,但我有时不得不重建整个表,所以我重做这个代码,兽人在模拟器上很好,但我的设备上程序炸弹当我执行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”.
如果我删除reloadData行代码在设备上工作。
我想知道这是否与我建立的键阵列(即使用自动释放字符串和字典)的方式。
+1可用性问题 – 2010-05-28 17:24:50
字符串非常小,表中大约有500行。我会尝试断点...... – Joe 2010-05-28 17:54:51
好的 - 这可能是一段时间内建立起来的泄漏情况。或者它可能是一个过度释放的对象,然后导致某人要求一个荒谬的malloc()。僵尸和分配工具也可能会帮助你很多。 – bbum 2010-05-28 17:59:17