【问题标题】:Is there any reason to modify the main.m file in your iOS applications?是否有任何理由修改 iOS 应用程序中的 main.m 文件?
【发布时间】:2011-12-21 08:25:52
【问题描述】:

我试图更好地理解基本 iOS 应用程序中包含的每个文件的用途。

是否有任何理由修改 main.m 文件?我想知道是否需要触摸该文件。如果你修改它,为什么?

【问题讨论】:

  • 非常明确的问题。欢迎使用 Stack Overflow!

标签: objective-c ios cocoa-touch main


【解决方案1】:

一般情况下你不需要接触 main.m 文件。这都是样板代码。任何初始化通常在您的应用程序委托中完成。

【讨论】:

    【解决方案2】:

    在 99.9% 的情况下,不需要触摸 main.m

    在另外 0.1% 中,您可能希望将调用的参数更改为 UIApplicationMain() 函数。此函数的最后两个参数指定代表您的主应用程序(默认为UIApplication)和应用程序委托的类的名称。

    如果您决定子类化UIApplication,您可以将第三个参数设置为子类的名称。如果您想拦截您的应用程序处理的某些事件(覆盖 sendEvent:),则子类化 UIApplication 会很有用。

    如果您只是决定重命名该类,您的应用委托类的名称可能会更改。此外,如果UIApplicationMain() 的第四个参数是nil(这是在iOS 5 中不使用Storyboard 的项目模板中的默认值),则表示您在应用程序的主NIB 文件中创建了应用程序委托对象。如果您决定更改该决定(例如,为现有项目调整 Storyboard),则必须更改第四个参数,以便告诉 UIApplicationMain() 它应该实例化的类的名称。

    【讨论】:

    • 我估计有 800,000 个应用程序。 .1% 是 800!可能是对的。
    【解决方案3】:

    在某些情况下,您可能需要修改此文件。默认情况下,iOS 开发模板假定您将使用 Interface Builder 来提供初始界面,并在 UIApplicationMain() 的最后一个参数存在 nil 值的情况下这样做,如下所示:

    return UIApplicationMain(argc, argv, nil, nil);
    

    如果您希望以编程方式构建您的界面,您可能需要使用最后一个参数指定您的应用程序委托类:

    return UIApplicationMain(argc, argv, nil, NSStringFromClass([SPAppDelegate class]));
    

    这是为了让应用程序知道从哪里开始构建您的界面。通过使用 Interface Builder 构建的一个,您可以通过 Info.plist 键之一指示要使用哪个 IB 文件作为基础。

    如果你有一个在自动引用计数之前创建的 main.m 文件,你可能有一个显式的 NSAutoreleasePool 来包装这个函数:

    NSAutoreleasePool *pool = [NSAutoreleasePool new];      
    int retval = UIApplicationMain(argc, argv, nil, NSStringFromClass([SPAppDelegate class]));
    [pool release];
    return retval;  
    

    在 ARC 下,这将被转换为 @autoreleasepool

    @autoreleasepool {
        int retVal = UIApplicationMain(argc, argv, nil,NSStringFromClass([SPAppDelegate class]));
        return retVal;
    }
    

    这是我以任何方式编辑过 main.m 文件的仅有的两种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 2011-11-29
      相关资源
      最近更新 更多