Arm1.ru

Полезная штука Prefix.pch

Открыл для себя полезную штуку в разработке под iOS - файл Prefix.pch - Precompiled Header.

Судя по описанию - Precompiled Headers компилируются, кэшируются и потом автоматически включаются в каждый компилируемый файл. Поэтому, если есть какой-то класс, который нужен везде или в почти везде в проекте - можно внутри Prefix.pch-файла, который автоматически создаётся в новом проекте, сделать include этого класса и он будет доступен везде. Мне вот совсем не нравилось в каждом View Controller'е снова и снова инклудить один класс, который нужен почти везде.

Пишут также, что инклуд файлов в Prefix.pch ускоряет компиляцию в дальнейшем, когда он и все включённые в него файлы уже один раз скомпилированы. Но при изменении Precompiled Headers или файлов, которые в них инклудятся - время компиляции наоборот увеличивается. Так что включать в него лучше редко меняемый код.

Плюс это хорошее место для объявления констант. Таким образом они тоже будут доступны по всему проекту. Инклудить файл с константами везде мне тоже не нравится.

В автоматически созданном AppName-Prefix.pch уже есть так называемые Preprocessor Macros'ы. Собственно пример такого файла:

#import <Availability.h>

#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import "YourEverywhereNeededClass.h"
#endif

#ifdef DEBUG
    #define DLog(...) NSLog(@"%s:%i %@", __PRETTY_FUNCTION__, __LINE__, [NSString stringWithFormat:__VA_ARGS__])
    #define DescLog(...) NSLog( @"%@", __VA_ARGS__ )
#endif

#define kNameOfConstant @"Constant Value"

На 10 строке идёт импорт файла, который нужен по всему проекту.

На 14 строке создаётся своя функция, которая выводит переданное значение, предварительно показав - в каком классе, в каком методе и на какой строке она вызвана. Например, DLog( @"arm1.ru" ) выведет:

-[SecondViewController viewWillAppear:]:84 arm1.ru

Класс SecondViewController, метод viewWillAppear, строка 84, значение "arm1.ru".

На 15 строке просто удобная функция - чтобы вывести, например, значения в массиве в консоль приходилось писать NSLog(@"%@", array) или NSLog( [array description] ), долго и длинно, куда приятнее, когда всё коротко.

На 18 строке дефайнится константа.

В общем, штука очень полезная.

keyboard_return back