2010-10-15 2 views
9

Когда вы создаете проект iphone OS по умолчанию в xCode, у вас есть main.m в разделе «Другие источники» на боковой панели в xCode. Как в int main() используется argc и argv и зачем он нужен?Как iOS использует argc и argv?

Спасибо :)

ответ

0

Я думаю, что они доступны только потому, что компиляторы используют их, но в случае IOS просто бесполезны, так как есть не прямой путь к динамически добавлять аргументы вызова приложения на iPhone. Или, по крайней мере, я полагаю ..

+0

Хм, интересная мысль. хорошо спасибо за ответ. Я надеюсь, что у кого-то будет немного больше понимания. еще раз спасибо! – Tim

6

Открыть информацию о вашем исполняемом файле. На вкладке параметров есть arguments to be passed on launch:. Если вы добавите что-то там, оно будет передано вашему приложению.
Apple создала некоторые аргументы, которые вы там поместили, и они меняют поведение приложения. -com.apple.CoreData.SQLDebug 1, например, напечатает несколько отладочных сообщений sql, если вы используете coredata. Я уверен, что есть больше аргументов отладки

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

EDIT: эти аргументы используются, только если вы запустите приложение с помощью xcode.

+0

Извините, я новичок в этом. Какой файл является исполняемым файлом в шаблоне iOS по умолчанию? – Tim

+0

В вашей боковой панели xcode есть несколько групп, один из которых называется вашим проектом, и есть Цели, Исполняемые файлы, Поиск результатов и так далее. Откройте группу «Исполняемые файлы», должен быть один элемент, ваш исполняемый файл. Дважды щелкните его, чтобы перейти к информации. –

+0

Ах, я вижу. Спасибо ~ – Tim

0

Это просто проявление Objective-C является подмножеством С.

В Mac OS X, вы можете использовать это, чтобы передать аргументы приложения, вызвав его из терминала, таких как (возможно, не работает):

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

На iOS нет возможности запуска приложений из командной строки.

+0

Вот что я думал. Значит, они ничего не делают в проекте, они там по умолчанию? – Tim

2

См: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html

Параметры ARGC и ARGV содержат либо запуска время аргументов, передаваемых приложения из система. Эти аргументы анализируются инфраструктурой UIKit и в противном случае могут быть проигнорированы .

В основном UIApplicationMain() создает одноплодные UIApplication объекта, который также передал свой Application объект делегата. Они не указывают протокол инициализации в документах, но похоже, что argc/argv передается в UIApplication во время некоторой инициализации, а затем UIApplication анализирует их и превращает в информацию (возможно, параметры запуска), к которой можно получить доступ через UIApplication.

В любом случае argc/argv в значительной степени зарезервированы для использования системой в приложениях iOS. Кажется, система использует их для передачи материала в UIApplication, по существу.

EDIT

В качестве эксперимента, я вставил следующий в моей основной функции():

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

Когда я запустил его в тренажере просто напечатанный один "аргумент" (ARGV [ 0]), который является контуром приложения.

Я подозреваю, что если вы положили это здесь и запустили приложение, которое регистрирует обработчик URL или открывается из-за локального уведомления или какого-либо другого системного события, тогда вы увидите URL-адрес или любые другие варианты, связанные с тем, как приложение было открыто , Однако вы находитесь не Предположим, что вы просто проанализируете argc/argv []! Используйте параметры запуска приложения, предоставленные для метода UIApplicationDelegate application:didFinishLaunchingWithOptions:.

+0

Я только что проверил это, и когда мое приложение запускается через «открыть», никакие аргументы не передаются в приложение. –

+0

Ну ладно, я предполагаю, что догадка была неправильной. Мне любопытно, есть ли у вас полный список допустимых параметров отладки, таких как -com.apple.CoreData.SQLDebug? Я не знал, что он существует, и мне это может пригодиться. – Nimrod