繁体   English   中英

这两个main.m有什么区别?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM