Категория
Вы используете категории для определения дополнительных методов существующего класса — даже тот, исходный код которого недоступен Вам — без разделения на подклассы. Вы обычно используете категорию для добавления методов к существующему классу, такой как один определенный в платформах Какао. Добавленные методы наследованы подклассами и неотличимы во время выполнения от исходных методов класса. Можно также использовать категории собственных классов:
Распределите реализацию своих собственных классов в отдельные исходные файлы — например, Вы могли сгруппировать методы большого класса в несколько категорий и поместить каждую категорию в различный файл.
Объявите закрытые методы.
Вы добавляете методы к классу путем объявления их в интерфейсном файле под названием категории и определения их в файле реализации под тем же именем. Название категории указывает, что методы являются расширением класса, объявленного в другом месте, не нового класса.
Объявление
Объявление интерфейса категории очень походит на объявление интерфейса класса — за исключением того, что название категории перечислено в круглых скобках после имени класса, и суперкласс не упоминается. Категория должна импортировать интерфейсный файл для класса, который это расширяет:
#import "SystemClass.h" |
@interface SystemClass (CategoryName) |
// method declarations |
@end |
Общее соглашение о присвоении имен состоит в том, что основное имя файла категории является именем класса, который категория расширяет сопровождаемый «+» сопровождаемый именем категории. Эта категория могла бы быть объявлена в названном файле SystemClass+CategoryName.h
.
При использовании категории для объявления закрытых методов одного из собственных классов, можно поместить объявление в файл реализации перед @implementation
блок:
#import "MyClass.h" |
@interface MyClass (PrivateMethods) |
// method declarations |
@end |
@implementation MyClass |
// method definitions |
@end |
Реализация
При использовании категории для объявления закрытых методов одного из собственных классов, можно поместить реализацию в класс @implementation
блок. При использовании категории для расширения класса, к которому у Вас нет исходного кода, или распределять реализацию Вашего собственного класса, Вы помещаете реализацию в названный файл <ClassName>+CategoryName.m
Реализация, как обычно, импортирует свой собственный интерфейс. Реализация категории могла бы поэтому быть похожей на это:
#import "SystemClass+CategoryName.h" |
@implementation SystemClass ( CategoryName ) |
// method definitions |
@end |