据我了解,如果启用ARC
,@autoreleasepool{}
内的对象应该在不再使用时释放。目标C - autoreleasepool和ARC泄漏内存
但是,代码
#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;
}
泄漏存储器。
仪器显示,泄漏的对象是__NSArrayM创造的 - [的NSString componentsSeparatedByString:]
所以,问题是:为什么__NSArrayM对象在创建它们的相同的循环迭代不被破坏?
谁能帮我解决这个问题
更新:谢谢你的答案,看来我使用的术语“内存泄漏”不当和误解如何@autoreleasepool{}
作品。要解决这个问题,我应该在for循环中放置@autoreleasepool{}
。
此代码分配大量内存,但不泄漏。 – stosha
如果你知道这是一个泄漏,为什么做这样一个大循环来证明如此而不是一次迭代? :) –
我其实认为这是一个很好的例子。我不知道为什么它获得了如此多的赞誉。 –