Arm1.ru

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

Открыл для себя полезную штуку в разработке под iOS - файл Prefix.pch. 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