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