[英]What is the difference between these two main.m?
我有些困惑,因为我有一个在示例代码中使用第一个main.m的类,而我的项目使用了后者。 使用我的applicationDidFinishLaunching将类实例化为实例时,我遇到了很多麻烦,我认为这些不同的main.m文件可能是罪魁祸首。 我的项目和示例项目之间的.xib文件与Main Nib名称的.plist设置相同。 代表都已正确链接
#import <UIKit/UIKit.h>
#import "MidiTestingAppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MidiTestingAppDelegate class]));
}
}
和
#import <UIKit/UIKit.h>
int main(int argc, char *argv[])
{
#if __has_feature(objc_arc)
@autoreleasepool
{
int retVal = UIApplicationMain(argc, argv, nil, nil);
return retVal;
}
#else
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
#endif
}
我假设前者直接进入App Delegate,而后者直接加载UIApplication? 那是对的吗?
这里有很多不良信息。
首先,假设您具有最新版本的Xcode,则只需要第一个版本。
@autoreleasepool
语法将在非ARC项目中运行。 编译器将其全部解决,并且在两种情况下都将生成适当的代码。
第二段代码使用功能检测宏( __has_feature
)在新的@autoreleasepool
语法和创建池的旧版NSAutoreleasePool
方法之间进行决定,具体取决于是否启用了ARC。 如果您正在运行的Xcode的旧版本没有可用的新语法,则只需使用第二段代码。
第二个例子是错误的形式。 这是因为@autoreleasepool
可以在非ARC项目中使用,并且实际上比创建自己的池要快( 链接 )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.