據我瞭解,如果啓用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
如果你知道這是一個泄漏,爲什麼做這樣一個大循環來證明如此而不是一次迭代? :) –
我其實認爲這是一個很好的例子。我不知道爲什麼它獲得瞭如此多的讚譽。 –