Можно передать некоторые значения из командной строки программам Objective-C при их выполнении. Эти значения называются аргументами командной строки, и часто они важны для вашей программы, особенно когда вы хотите управлять своей программой извне, а не жестко кодировать эти значения внутри кода.
Аргументы командной строки обрабатываются с помощью аргументов функции main (), где argc ссылается на количество переданных аргументов, а argv [] — массив указателей, который указывает на каждый аргумент, переданный программе. Ниже приведен простой пример, который проверяет, есть ли какой-либо аргумент из командной строки, и предпринимает соответствующие действия:
#import <Foundation/Foundation.h> int main( int argc, char *argv[] ) { if( argc == 2 ) { NSLog(@"The argument supplied is %s\n", argv[1]); } else if( argc > 2 ) { NSLog(@"Too many arguments supplied.\n"); } else { NSLog(@"One argument expected.\n"); } }
Когда приведенный выше код компилируется и выполняется с одним аргументом, скажем, «тестирование», он дает следующий результат.
2013-09-13 03:01:17.333 demo[7640] The argument supplied is testing
Когда приведенный выше код компилируется и выполняется с двумя аргументами, скажем, testing1 и testing2, он дает следующий результат.
2013-09-13 03:01:18.333 demo[7640] Too many arguments supplied.
Когда приведенный выше код компилируется и выполняется без передачи аргумента, он дает следующий результат.
2013-09-13 03:01:18.333 demo[7640] One argument expected
Следует отметить, что argv [0] содержит имя самой программы, а argv [1] — указатель на первый предоставленный аргумент командной строки, а * argv [n] — последний аргумент. Если аргументы не предоставлены, argc будет один, иначе, если вы передадите один аргумент, тогда argc будет установлен в 2.
Вы передаете все аргументы командной строки, разделенные пробелом, но если сам аргумент имеет пробел, вы можете передать такие аргументы, заключив их в двойные кавычки «» или одинарные кавычки «. Давайте еще раз напишем приведенный выше пример, где мы напечатаем имя программы, а также передадим аргумент командной строки, заключив в двойные кавычки —
#import <Foundation/Foundation.h> int main( int argc, char *argv[] ) { NSLog(@"Program name %s\n", argv[0]); if( argc == 2 ) { NSLog(@"The argument supplied is %s\n", argv[1]); } else if( argc > 2 ) { NSLog(@"Too many arguments supplied.\n"); } else { NSLog(@"One argument expected.\n"); } return 0; }
Когда вышеприведенный код компилируется и выполняется с одним аргументом, разделенным пробелом, но внутри двойных кавычек с надписью «Testing1 Testing2», он дает следующий результат.