【问题标题】:How does the iOS use argc and argv?iOS如何使用argc和argv?
【发布时间】:2011-04-25 23:36:45
【问题描述】:

当您在 xCode 中创建默认 iphone OS 项目时,您在 xCode 侧面板的“Other Sources”中有一个 main.m。里面的 int main() 是如何使用 argc 和 argv 的,为什么需要它?

谢谢:)

【问题讨论】:

    标签: iphone xcode macos ipad ios4


    【解决方案1】:

    打开可执行文件的信息。在参数选项卡中有arguments to be passed on launch:。如果您在此处添加内容,它将被传递给您的应用。
    Apple 创建了一些参数,您将它们放在那里,它们会改变应用程序的行为。 -com.apple.CoreData.SQLDebug 1 例如,如果您使用 coredata,将打印一些 sql 调试消息。我敢肯定还有更多的调试参数

    int count;
    for (count = 0; count < argc; count++)
    {
        NSLog(@"argv[%d] = %s\n", count, argv[count]);
    }
    

    编辑:这些参数仅在您使用 xcode 启动应用程序时使用。

    【讨论】:

    • 对不起,我是新手。哪个文件是默认 iOS 模板中的可执行文件?
    • 在你的xcode侧边栏中有几个组,一个和你的项目一样命名,还有Targets、Executables、Find Results等等。打开可执行文件组,应该有一项,您的可执行文件。双击它以获取信息。
    【解决方案2】:

    见:http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html

    argc 和 argv 参数包含 传递给的任何启动时参数 来自系统的应用程序。这些 参数由 UIKit 解析 基础设施,否则可以 忽略。

    基本上UIApplicationMain() 创建一个单例UIApplication 对象,该对象也被传递给您的应用程序委托对象。他们没有在文档中指定初始化协议,但听起来 argc/argv 在某种初始化期间被传递给 UIApplication,然后 UIApplication 解析它们并将它们转换为可以通过 UIApplication 访问的信息(可能是启动选项)。

    在任何情况下,argc/argv 几乎都是为 iOS 应用程序中的系统使用而保留的。本质上,系统似乎使用它们将东西传递给 UIApplication。

    编辑

    作为一个实验,我在 main() 函数中插入了以下内容:

    for (int i; i < argc; i++)
        NSLog(@"%s", argv[i]);
    

    当我在模拟器中启动它时,它只是打印了一个“参数”(argv[0]),它是应用程序的路径。

    我怀疑如果你把它放在这里并启动一个注册 URL 处理程序或由于本地通知或其他系统事件而打开的应用程序,那么你会看到 URL 或与应用程序打开方式相关的任何选项。但是,您不应该自己解析 argc/argv[]!使用提供给UIApplicationDelegate application:didFinishLaunchingWithOptions: 方法的应用程序启动选项。

    【讨论】:

    • 我刚刚检查过了,当我的应用程序通过“打开方式”启动时,没有参数传递给应用程序。
    • 哦,好吧,我想我当时的猜测是错误的。不过我很好奇,您是否有完整的有效调试选项列表,例如 -com.apple.CoreData.SQLDebug 东西?我不知道它的存在,它可能对我有用。
    【解决方案3】:

    这只是 Objective-C 是 C 的超集的一种表现。

    在 Mac OS X 上,您可以使用它通过从终端调用应用程序来将参数传递给应用程序,例如(可能不起作用):

    /Applications/iTunes.app/Contents/MacOS/iTunes my args to application
    

    在 iOS 上,无法从命令行启动应用程序。

    【讨论】:

    • 我就是这么想的。所以他们实际上并没有在项目中做任何事情,他们只是默认情况下在那里?
    【解决方案4】:
    【解决方案5】:

    我认为它们可用只是因为编译器使用它们,但在 iOS 情况下只是没用,因为没有直接的方法可以在 iPhone 上为调用的应用程序动态添加参数。或者至少我认为..

    【讨论】:

    • 嗯,有趣的想法。好的,谢谢您的回复。我希望有人有更多的见解。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 2011-04-15
    • 2012-04-20
    • 1970-01-01
    • 2020-11-03
    • 2013-09-08
    相关资源
    最近更新 更多