我需要一些帮助或只是一个简单的例子来解决以下情况: (显然我已搜索并用Google搜索了几个小时而没有任何令人满意的结果)
我在CoreData中存储了很多文本注释,我想将它们组合成一个大的html字符串,以便在webview中显示它们。所以我有一个非常简单的循环,遍历所有核心数据条目并将新位附加到现有字符串上。我在Instruments中看到的是,每次执行追加字符串操作时,都会分配一个新的CFstring
,其大小略大于前一个,最后是GB的字符串分配崩溃。 (目前我正在使用[myMutableString appendFormat:@"%@", myCoreDataReference]
因此,当我看到问题来自哪个角落时,我已经尝试了所有我能想到的业余开发人员,显然是使用NSMutable字符串。显然我在这里仍然做错了,因为问题至少仍然存在于某种形式。
如果有人能够为我提供一个简单的示例,每次使用正确的内存管理时附加到字符串的循环,我将不胜感激。 (我正在使用ARC)
干杯, 鲍勃
答案 0 :(得分:1)
试试吧:
// just my example
for (int i = 0; i < 10000; i++)
{
// do autoreleasepool here to be sure that myCoreDataReference will be deallocated
@autoreleasepool {
NSString *myCoreDataReference = [NSString stringWithFormat@"%d",i];
[myMutableString appendFormat:@"%@", myCoreDataReference]
}
}
答案 1 :(得分:1)
当您在紧密循环中执行操作时,始终建议您为代码块创建自动释放池。
for(int i = 0; i<yourCommentStringArrayCount; i++)
{
@autoreleasepool
{
//Do the append operation
}
}
这确保在为该迭代执行代码块后立即释放任何已分配的内存。