【发布时间】:2012-06-12 13:31:43
【问题描述】:
我有点困惑,因为我有一个类在其示例代码中使用第一个 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?对吗?
【问题讨论】:
-
第二个有两个编译时分支:实际编译哪个取决于ARC是否启用。
-
我希望这样的检查不会分散在整个项目中......
-
Arc 检查分散在我下载的整个课程中。这会有问题吗?
-
对,我看到有两个分支 - 一个用于 Arc,一个没有。我想知道他们加载的内容有何不同,因为一个使用委托而另一个不使用委托。我的困惑是因为委托在两个项目 NIB 中的设置完全相同。但仅加载示例代码(检查 Arc 的代码)。我想我的问题是,除了检查 ARC 之外,这两个 main.m 做什么不同。
-
问题是,即使在非 ARC 项目中,您仍然可以使用新的 @autorelease 池语法,只要您有最新的 Xcode 版本。编译器算出来了。
标签: objective-c ios