DevPrep

Все темы › Objective-C

Что такое категории и расширения классов?

Middle PRO

Категория (category)

@interface NSString (Validation) — добавляет методы к существующему классу без наследования, в том числе к системному и к тому, чьих исходников у вас нет. Методы категории попадают в таблицу методов класса при загрузке и видны всем экземплярам.

Ограничения и ловушки:

#import <Foundation/Foundation.h>
#import <objc/runtime.h>

@interface NSObject (Tag)
@property (nonatomic, copy) NSString *ds_tag;
@end

@implementation NSObject (Tag)
static char kTagKey;
- (NSString *)ds_tag {
    return objc_getAssociatedObject(self, &kTagKey);
}
- (void)setDs_tag:(NSString *)tag {
    objc_setAssociatedObject(self, &kTagKey, tag,
                             OBJC_ASSOCIATION_COPY_NONATOMIC);
}
@end

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store