Как iOS использует argc и argv? - PullRequest
       8

Как iOS использует argc и argv?

9 голосов
/ 15 октября 2010

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

Спасибо :))

Ответы [ 5 ]

6 голосов
/ 15 октября 2010

Открыть информацию о вашем исполняемом файле. Во вкладке аргументов есть 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]);
}

РЕДАКТИРОВАТЬ: эти аргументы используются, только если вы запускаете приложение с xcode.

2 голосов
/ 15 октября 2010

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

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

В основном UIApplicationMain() создает объект singleton UIApplication, который также передается вашему объекту Application Delegate.Они не определяют протокол инициализации в документах, но похоже, что 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 голосов
/ 15 октября 2010
0 голосов
/ 15 октября 2010

Это просто проявление Objective-C, являющегося надмножеством C.

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

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

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

0 голосов
/ 15 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...