iOS如何使用argc和argv?

时间:2010-10-15 14:27:53

标签: iphone xcode macos ipad ios4

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

谢谢:)

5 个答案:

答案 0 :(得分: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启动应用程序时才会使用这些参数。

答案 1 :(得分:2)

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

  

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

基本上UIApplicationMain()会创建一个单独的UIApplication对象,该对象也会传递给您的Application Delegate对象。它们没有在文档中指定初始化协议,但听起来像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:方法提供的应用程序启动选项。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这只是Objective-C作为C的超集的表现。

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

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

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

答案 4 :(得分:0)