附加到字符串的内存问题

时间:2014-05-05 09:16:37

标签: ios objective-c core-data memory-management

我需要一些帮助或只是一个简单的例子来解决以下情况: (显然我已搜索并用Google搜索了几个小时而没有任何令人满意的结果)

我在CoreData中存储了很多文本注释,我想将它们组合成一个大的html字符串,以便在webview中显示它们。所以我有一个非常简单的循环,遍历所有核心数据条目并将新位附加到现有字符串上。我在Instruments中看到的是,每次执行追加字符串操作时,都会分配一个新的CFstring,其大小略大于前一个,最后是GB的字符串分配崩溃。 (目前我正在使用[myMutableString appendFormat:@"%@", myCoreDataReference]

因此,当我看到问题来自哪个角落时,我已经尝试了所有我能想到的业余开发人员,显然是使用NSMutable字符串。显然我在这里仍然做错了,因为问题至少仍然存在于某种形式。

如果有人能够为我提供一个简单的示例,每次使用正确的内存管理时附加到字符串的循环,我将不胜感激。 (我正在使用ARC)

干杯, 鲍勃

2 个答案:

答案 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
   } 
}

这确保在为该迭代执行代码块后立即释放任何已分配的内存。