随着 ARC 的出现,xcode 中出现了一个新的 main 函数模板,它更有意义。但是,我对旧模板有疑问。
众所周知,XCode for Cocoa touch applications 中的旧 main 函数模板是这样的:
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
但是,最后两行无法访问,因为文档明确指出 UIApplicationMain 永远不会返回。它只是在完成后调用 exit() 。那么为什么苹果会选择这样的模板呢?为什么不只是这个?
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
return UIApplicationMain(argc, argv, nil, nil);
}
是不是因为人们会以此为例,而不是正确地释放他们的自动释放池?还是因为它会绊倒静态分析器?或者其他可能的东西?
这个问题可能太开放了,所以我会换一种方式问。像 Apple 那样使用模板是否有技术原因?