Открыл для себя полезную штуку в разработке под 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 строке дефайнится константа.
В общем, штука очень полезная.