我在iPad应用程序中使用Core Data来存储详细信息。应用程序为用户提供了一个选项,以XML的形式将保存的详细信息(在CoreData中)备份到其不同的云服务。为此,应用程序使用以下逻辑来创建XML字符串
从ManagedObjectContext中获取所有已保存的详细信息。
遍历数组中的所有项,从这些ManagedObject及其属性值创建格式化的XML字符串。
NSString *contentFormat = @"";
for(FolderItem *folder in contentArray) {
contentFormat = [contentFormat stringByReplacingOccurrencesOfString:@"_Title_"
withString:folder.title];
contentFormat = [contentFormat stringByReplacingOccurrencesOfString:@"_Identifier_"
withString:folder.identifier];
contentFormat = [contentFormat stringByReplacingOccurrencesOfString:@"_Shared_"
withString:[NSString stringWithFormat:@"%d",[folder.shared integerValue]]];
if ([folder.contentUrl length]) {
contentFormat = [contentFormat stringByReplacingOccurrencesOfString:@"_ContentUrl_"
withString:folder.contentUrl];
}else {
contentFormat = [contentFormat stringByReplacingOccurrencesOfString:@"_ContentUrl_"
withString:@""];
}
}
但是当处理大量(大约15k)的CoreData对象时,应用程序崩溃时出现错误“应用程序因内存错误而终止”。
有没有人有同样的经历?
请分享您的建议。
提前致谢。
答案 0 :(得分:0)
检查您的iPhone内存。一些应用程序在后台运行,因此会发生。
检查iPhone中的免费存储空间。
参考下面的链接:
答案 1 :(得分:0)
虽然ARC中局部变量一旦超出范围就会被释放,但是指针可能仍然没有及时释放,特别是在循环中。 @autoreleasepool{ }
将确保在块结束时释放它们。
所以试着把循环体放在@autoreleasepool { ... }
中;并将NSString *contentFormat = @"";
放入@autoreleasepool
块。