2010-10-15 153 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