据我了解,如果ARC
启用,里面的对象@autoreleasepool{}
应该在不再使用时释放。
然而,代码
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
for (int i = 0; i < 1000000000; i++) {
NSString *string = @"ab c";
NSArray *array = [string componentsSeparatedByString:string];
}
}
return 0;
}
泄漏内存。
仪器显示泄漏的对象是由 -[NSString componentsSeparatedByString:] 创建的 __NSArrayM
所以,问题是:为什么 __NSArrayM 对象没有在它们创建的同一个循环迭代中被销毁?
谁能帮我解决这个问题
更新:感谢您的回答,看来我错误地使用了“内存泄漏”一词,并且误解了它的@autoreleasepool{}
工作原理。为了解决这个问题,我应该放在@autoreleasepool{}
for 循环中。