Категории языка

Objective-C

Язык Objective-C обладает возможностью добавлять новые методы к уже существующим классам. Аналогичной возможностью обладает язык Ruby, C#, JavaScript и другие. При этом не требуется исходников класса и добавленные методы автоматически становятся доступными всем классам, унаследованным от изменяемого. Так можно добавить новый метод классу NSObject и этот метод автоматически добавится во все остальные классы.

Механизм, позволяющий расширять уже существующие классы (путем добавления новых методов, новые instance-переменные добавить таким образом нельзя), называется категорией.

Категория имеет свое имя, список методов и имя класса, который она расширяет. Описание категории имеет следующий вид:


#import "ClassName.h"
@interface ClassName ( CategoryName )
  объявление методов
@end

Реализация категории выглядит следующим образом:


#import "CategoryName.h"
@implementation ClassName ( CategoryName )
  реализация методов
@end

Ограничения при создании категорий:

  • Невозможность добавления переменных
  • Возможная коллизия имен с самим классом, поэтому необходимо использовать оригинальные префиксы в наименовании своих методов

Неформальные протоколы

Добавление категории к классу NSObject - называется созданием неформального протокола. При работе с неформальными протоколами мы реализуем только те методы, которые хотим.

Узнать поддержевает ли класс какой либо метод можно с помощью селекторов

Селекторы

Селектор - это имя метода закодированное специальным образом, используемым objective-c для быстрого поиска. Указание компилятору на селектор происходит при помощи директивы @selector(метод)


First* f = [[First alloc] init];
if([f respondsToSelector:@selector(setName:)]){
  NSLog (@"Метод поддерживается");
}

В этом примере создается экземпляр класса First - f (наследник NSObject), после с помощью метода respondsToSelector проверяем может ли класс ответить на метод setName

 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac