高级内存管理编程指南关于@autoreleasepool 说:
使用本地自动释放池块来减少峰值内存占用
许多程序会创建自动释放的临时对象。这些对象添加到程序的内存占用,直到块结束。在许多情况下,允许临时对象累积到当前事件循环迭代结束不会导致过多的开销;但是,在某些情况下,您可能会创建大量临时对象,这些对象会大大增加内存占用并且您希望更快地处理这些对象。在后一种情况下,您可以创建自己的自动释放池块。在块的末尾,临时对象被释放,这通常会导致它们的释放,从而减少程序的内存占用。
以下示例显示了如何在 for 循环中使用本地自动释放池块。
NSArray *urls = <# An array of file URLs #>;
for (NSURL *url in urls) {
@autoreleasepool {
NSError *error;
NSString *fileContents = [NSString stringWithContentsOfURL:url
encoding:NSUTF8StringEncoding error:&error];
/* Process the string, creating and autoreleasing more objects. */
}
}
这段代码是否也可以在没有 autoreleasepool 的情况下编写并有效管理?
就像在处理它之后创建property of fileContents
和设置它一样。nil
self.filecontents = nil;