我正在尝试创建一个从NSString中进行大量json序列化的函数。
NSArray* array = nil;
NSError* error = nil;
for (NSObject* obj in otherArray) {
array = [NSJSONSerialization JSONObjectWithData:[obj.json dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:&error];
// I'm using array here .. and then i don't need it anymore
}
这里我的otherArray可能非常大而且obj.json也是。
但是一段时间后,由于内存问题(> 1GB),应用程序崩溃了。 似乎我的数组永远不会在for循环中dealloc,因为当我评论该行时我没有得到任何错误.. 如何使用ARC释放内存?
由于
答案 0 :(得分:1)
在循环内使用自动释放池块来减少程序的内存占用:
NSArray* array = nil;
NSError* error = nil;
for (NSObject* obj in otherArray) {
@autoreleasepool {
array = [NSJSONSerialization JSONObjectWithData:[obj.json dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:&error];
// I'm using array here .. and then i don't need it anymore
}
}
许多程序会创建自动释放的临时对象。这些 对象添加到程序的内存占用,直到结束 块。在许多情况下,允许临时对象累积 直到当前事件循环迭代结束才导致 过度开销;但是,在某些情况下,您可以创建一个 大量临时对象大量增加内存 足迹和你想要更快地处置。在这些 在后一种情况下,您可以创建自己的自动释放池块。在 块的结尾,临时对象被释放,这通常是 导致他们的释放,从而减少程序的内存 足迹。