以下简单代码在 ARC 下,在最新的 Xcode (4.6.2) 中显示了在使用 Leaks 工具进行分析时,在 iOS 模拟器中,在具有-Os
优化的发布构建配置中时的泄漏:
- (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 编译器)吗?