Категория

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

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

Объявление

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

#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

Необходимые как условие статьи

Похожие статьи

    (Ни один)