【问题标题】:Why does Xcode use NSStringFromClass([AppDelegate class]) instead of just @"AppDelegate" or nil为什么 Xcode 使用 NSStringFromClass([AppDelegate class]) 而不仅仅是 @"AppDelegate" 或 nil
【发布时间】:2013-01-26 13:03:22
【问题描述】:

我注意到在默认使用 ARC 的最新版本的 Xcode 中,当您开始一个新项目时 Xcode 为您生成的 main.m 文件使用 NSStringFromClass([AppDelegate class]) 作为 UIApplicationMain 中应用程序委托的参数,而不仅仅是@"AppDelegate" 甚至只是nil

新方法:

@autoreleasepool {
      return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}

老办法:

  @autoreleasepool {
      int retVal = UIApplicationMain(argc, argv, nil, nil);
      return retVal;
  }

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

【问题讨论】:

    标签: objective-c xcode


    【解决方案1】:

    这是一个编译检查。如果可以在编译时检查参数会更好。如果只是字符串,是无法检查的。

    关于 nil 参数,文档说:

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

    假设您正在使用 xib 文件来声明应用程序委托的类。嗯,很多项目都没有。一般来说,没有 xib 文件的项目模板(例如“空应用程序”)不能使用nil

    【讨论】:

    • 啊,听了,突然觉得很有道理=)谢谢
    • 完全正确;如果类被重命名或不存在,[AppDelegate class] 会强制出现链接错误。 NSStringFromClass() 是原始 API 的遗迹,它接受一个字符串,而不是一个类。
    • 值得一提的是,Xcode 的新项目模板不使用 MainWindow.xib 来加载 App Delegate,所以这里必须指定 App Delegate 而不是使用nil
    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    相关资源
    最近更新 更多