Категории в Objective-C

Создание категории

Для того, чтобы создать новую категорию в Xcode, необходимо при создании нового файла выбрать Objective-C category. И так, нажимаем File → New → File. Далее выбираем Objective-C category и нажимаем “Next”. Указываем имя категории (Category): colorWithHex, а так же имя класса, к которому мы добавляем категорию (Category on): UIColor. Нажимаем “Next”, а затем “Create”.

Определение нового метода категории

Возвращаемся в Xcode и открываем файл с именем UIColor+colorWithHex.h. Теперь нам надо добавить новый метод в интерфейс. Код метода представлен в листинге:

@interface UIColor (colorWithHex)
+ (UIColor *)colorWithHex:(int)hex;
@end

Реализация метода категории

Теперь необходимо реализовать метод, открываем UIColor+colorWithHex.m и пишем реализацию метода, как показано в листинге ниже.

#import "UIColor+colorWithHex.h"

@implementation UIColor (colorWithHex)

+ (UIColor *)colorWithHex:(int)hex
{

    CGFloat r = ((hex & 0xFF0000) >> 16) / 255.0;
    CGFloat g = ((hex & 0x00FF00) >> 8 ) / 255.0;
    CGFloat b = ((hex & 0x0000FF) ) / 255.0;

    return [UIColor colorWithRed:r green:g blue:b alpha:1.0f];

}

@end

Проверка категории

Теперь для использования нового метода нам необходимо подключить заголовочный файл UIColor+colorWithHex.h. Для проверки нашей категории зададим фон нашего окна цветом #007FFF. Так же выведем значение цвета в консоль, используя NSLog.

UIColor *color = [UIColor colorWithHex:0x07FFF];
self.view.backgroundColor = color;
NSLog(@"Color is %@", color);

Использование нашей категории

И так, все готово. Нажимаем Product → Run. Убедимся, что в окно приложение стало голубого цвета. Так же в консоль должно вывестись следующее:

2013-02-12 22:38:21.340 TestCategory[6811:11303] Color is UIDeviceRGBColorSpace 0 0.498039 1 1

Из этого видно, что красный цвет равен 0, зеленый 0.498039, синий 1 - все правильно.

Заключение

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


Опубликовано: Февраль 7, 2013 ~ obj-c