簡體   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