Когда вы создаете проект iphone OS по умолчанию в xCode, у вас есть main.m в разделе «Другие источники» на боковой панели в xCode. Как в int main() используется argc и argv и зачем он нужен?Как iOS использует argc и argv?
Спасибо :)
Когда вы создаете проект iphone OS по умолчанию в xCode, у вас есть main.m в разделе «Другие источники» на боковой панели в xCode. Как в int main() используется argc и argv и зачем он нужен?Как iOS использует argc и argv?
Спасибо :)
Я думаю, что они доступны только потому, что компиляторы используют их, но в случае IOS просто бесполезны, так как есть не прямой путь к динамически добавлять аргументы вызова приложения на iPhone. Или, по крайней мере, я полагаю ..
Открыть информацию о вашем исполняемом файле. На вкладке параметров есть 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.
Извините, я новичок в этом. Какой файл является исполняемым файлом в шаблоне iOS по умолчанию? – Tim
В вашей боковой панели xcode есть несколько групп, один из которых называется вашим проектом, и есть Цели, Исполняемые файлы, Поиск результатов и так далее. Откройте группу «Исполняемые файлы», должен быть один элемент, ваш исполняемый файл. Дважды щелкните его, чтобы перейти к информации. –
Ах, я вижу. Спасибо ~ – Tim
Это просто проявление Objective-C является подмножеством С.
В Mac OS X, вы можете использовать это, чтобы передать аргументы приложения, вызвав его из терминала, таких как (возможно, не работает):
/Applications/iTunes.app/Contents/MacOS/iTunes my args to application
На iOS нет возможности запуска приложений из командной строки.
Вот что я думал. Значит, они ничего не делают в проекте, они там по умолчанию? – Tim
Там должен быть обычным execve() под:
Параметры 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:
.
Я только что проверил это, и когда мое приложение запускается через «открыть», никакие аргументы не передаются в приложение. –
Ну ладно, я предполагаю, что догадка была неправильной. Мне любопытно, есть ли у вас полный список допустимых параметров отладки, таких как -com.apple.CoreData.SQLDebug? Я не знал, что он существует, и мне это может пригодиться. – Nimrod
Хм, интересная мысль. хорошо спасибо за ответ. Я надеюсь, что у кого-то будет немного больше понимания. еще раз спасибо! – Tim