我在我的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