【发布时间】:2011-04-25 23:36:45
【问题描述】:
当您在 xCode 中创建默认 iphone OS 项目时,您在 xCode 侧面板的“Other Sources”中有一个 main.m。里面的 int main() 是如何使用 argc 和 argv 的,为什么需要它?
谢谢:)
【问题讨论】:
标签: iphone xcode macos ipad ios4
当您在 xCode 中创建默认 iphone OS 项目时,您在 xCode 侧面板的“Other Sources”中有一个 main.m。里面的 int main() 是如何使用 argc 和 argv 的,为什么需要它?
谢谢:)
【问题讨论】:
标签: iphone xcode macos ipad ios4
打开可执行文件的信息。在参数选项卡中有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 启动应用程序时使用。
【讨论】:
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: 方法的应用程序启动选项。
【讨论】:
这只是 Objective-C 是 C 的超集的一种表现。
在 Mac OS X 上,您可以使用它通过从终端调用应用程序来将参数传递给应用程序,例如(可能不起作用):
/Applications/iTunes.app/Contents/MacOS/iTunes my args to application
在 iOS 上,无法从命令行启动应用程序。
【讨论】:
我认为它们可用只是因为编译器使用它们,但在 iOS 情况下只是没用,因为没有直接的方法可以在 iPhone 上为调用的应用程序动态添加参数。或者至少我认为..
【讨论】: