为什么 Objective-C命令行和iOS程序的 Xcode 4.x 模板会添加@autoreleasepool {}
part wrappingmain()
的代码?请注意,这不会发生在OS X应用程序模板中。
为什么 OS X 应用程序不这样做呢?为什么不使用相同的方法?
最后,既然任何程序退出时都会释放所有内存,为什么所有这些都具有实际重要性?
或者换一种说法,省略命令行@autoreleasepool { ... }
或iOS Objective -C 程序的实际后果是什么?main()
这两段代码编译并且似乎等效地工作:
1.
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSArray *array = @[@"Hello, world!"];
NSLog(@"%@", array[0]);
}
return 0;
}
2.
int main(int argc, const char * argv[])
{
NSArray *array = @[@"Hello, world!"];
NSLog(@"%@", array[0]);
}
注意,我只关心 ARC 上下文中的解释。ARC 禁止显式使用autorelease
.