4
在最新的Xcode(4.6.2)下的ARC下面的簡單代碼顯示泄漏儀器,在iOS模擬器中,發佈構建配置-Os
優化:奇怪的內存泄漏與塊和在ARC中以某種方式複製
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
for (int i = 0; i < 10; i++)
{
void (^block)() =^
{
NSLog(@"%d", i);
};
id x = block;
[x copy];
}
return YES;
}
它顯示了10個泄漏塊。 (它沒有顯示關閉優化時的泄漏;但關閉優化對於我們的應用來說並不現實。)奇怪的是,查看每個泄漏塊的內存管理歷史記錄,它們看起來很好 - 每個都有一個malloc從副本和發佈;但發佈不知何故不會釋放它?
這是一個編譯器錯誤(它使用默認的Apple LLVM編譯器)?
你確定ARC是否打開?嘗試插入'-retain'並查看編譯器是否抱怨。 – 2013-05-04 07:42:55
@KevinBallard:是的,ARC已開啓。如果ARC未打開,爲什麼關閉優化時泄漏會消失?此外,該塊被釋放,如儀器中所見;它只是沒有被釋放。 – user102008 2013-05-06 07:20:36
如果您替換id x = block,會發生什麼情況? [x copy];'用'[block copy]'? – 2013-05-09 15:22:31