2010-10-15 169 views
9

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

谢谢:)

回答

0

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

+0

嗯,有趣的想法。好的,谢谢你的回应。我希望有人有更多的见解。再次感谢! – Tim 2010-10-15 14:36:04

6

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

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

编辑:这些参数只用于如果你用xcode启动应用程序。

+0

对不起,我是新手。哪个文件是默认iOS模板中的可执行文件? – Tim 2010-10-15 14:43:47

+0

在您的xcode侧边栏中有几个组,其中一个被命名为您的项目,并且有Targets,Executables,Find Results等。打开可执行文件组,应该有一个项目,您的可执行文件。双击它以获取信息。 – 2010-10-15 14:45:42

+0

啊,我明白了。谢谢〜 – Tim 2010-10-15 14:47:24

0

这仅仅是一个Objective-C的是C.

的超集,在Mac OS X中的表现,你可以通过从终端,称其如(可能不工作使用这个参数传递给应用程序):

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

在iOS上,不可能从命令行启动应用程序。

+0

这就是我的想法。所以他们在项目中没有做任何事情,他们只是在默认情况下? – Tim 2010-10-15 14:46:34

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,实质上是。

EDIT

作为一个实验,我插在我main()函数如下:

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

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

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

+0

我刚刚检查过,当我的应用程序通过“open in”启动时,没有参数传递给应用程序。 – 2010-10-15 15:33:48

+0

噢,我想我的猜测是错误的。我很好奇,你有没有像-com.apple.CoreData.SQLDebug这样的有效调试选项的完整列表?我不知道这个人存在,它可能会派上用场。 – Nimrod 2010-10-15 15:38:09