为什么Xcode使用NSStringFromClass([AppDelegate class])而不仅仅是@"AppDelegate"或者nil

Tob*_*oby 8 xcode objective-c

我注意到在Xcode的最新版本中默认使用ARC,当你启动一个新项目时,Xcode为你生成的main.m文件NSStringFromClass([AppDelegate class])用作UIApplicationMain中app代理的参数而不仅仅是@"AppDelegate"或者甚至只是nil

新方法:

@autoreleasepool {
      return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
Run Code Online (Sandbox Code Playgroud)

旧方式:

  @autoreleasepool {
      int retVal = UIApplicationMain(argc, argv, nil, nil);
      return retVal;
  }
Run Code Online (Sandbox Code Playgroud)

我只是想知道这是否有原因?这对我来说似乎有点做作,但我希望能够直截了当.

Sul*_*han 10

这是一个汇编检查.如果可以在编译时检查参数,那就更好了.如果它只是一个字符串,则无法检查.

关于nil论点,文件说:

如果从应用程序的主nib文件加载委托对象,请指定nil.

假设您正在使用xib文件来声明应用程序委托的类.好吧,很多项目都没有.通常,没有xib文件的项目模板(例如"空应用程序")无法使用nil.

  • 值得一提的是,Xcode的新项目模板不使用MainWindow.xib来加载App Delegate,因此这就是必须在此处指定App Delegate而不是使用`nil`的原因. (2认同)