Подтвердить что ты не робот

Есть ли причина изменить файл main.m в приложениях iOS?

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

Есть ли причина для изменения файла main.m? Мне интересно, нужно ли когда-нибудь трогать этот файл. Если вы его модифицируете, почему?

4b9b3361

Ответ 1

В 99,9% всех случаев нет необходимости касаться main.m.

В остальных 0,1% вы можете изменить аргументы вызова функции UIApplicationMain(). Последние два аргумента этой функции определяют имена классов, которые представляют ваше основное приложение (UIApplication по умолчанию) и делегат приложения.

Если вы когда-нибудь решаете подкласс UIApplication, вы должны установить третий аргумент имени вашего подкласса. Подклассификация UIApplication может быть полезна, если вы хотите перехватить определенные события, которые обрабатывают ваши приложения (переопределить sendEvent:).

Имя вашего класса делегата приложения может измениться, если вы просто решите переименовать этот класс. Кроме того, если четвертый аргумент UIApplicationMain() равен nil (который по умолчанию используется в шаблонах проектов, которые не используют Storyboarding в iOS 5), это означает, что вы создаете объект делегирования приложения в главном файле NIB приложения. Если вы когда-нибудь решите изменить это решение (например, адаптировать Storyboarding для существующего проекта), вам придется изменить четвертый аргумент, чтобы сообщить UIApplicationMain() имя класса, который он должен создать.

Ответ 2

Существуют определенные случаи, когда вы можете изменить этот файл. По умолчанию шаблоны разработки iOS предполагают, что вы будете использовать Interface Builder для обеспечения вашего начального интерфейса и сделать это с наличием значения nil в качестве последнего аргумента для UIApplicationMain(), как в следующем:

return UIApplicationMain(argc, argv, nil, nil);

Если вы хотите программно разработать свой интерфейс, вам может потребоваться указать класс делегата приложения с использованием последнего параметра:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([SPAppDelegate class]));

Это то, что приложение знает, с чего начать при создании вашего интерфейса. С помощью одного построенного с помощью Interface Builder вы указываете, какой IB файл использовать в качестве базы через один из ваших ключей Info.plist.

Если у вас есть файл main.m, созданный до автоматического подсчета ссылок, у вас может быть явный NSAutoreleasePool, который обертывает эту функцию:

NSAutoreleasePool *pool = [NSAutoreleasePool new];      
int retval = UIApplicationMain(argc, argv, nil, NSStringFromClass([SPAppDelegate class]));
[pool release];
return retval;  

В ARC это будет преобразовано в @autoreleasepool:

@autoreleasepool {
    int retVal = UIApplicationMain(argc, argv, nil,NSStringFromClass([SPAppDelegate class]));
    return retVal;
}

Это только два случая, когда я редактировал файл main.m.

Ответ 3

Как правило, вам не нужно касаться этого файла. Это все шаблонный код. Любая инициализация обычно выполняется в вашем делете приложения.