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