Как я могу объявить частную собственность в названной категории?

Я знаю о возможности объявления частных свойств в классе, помещая их в неназванную категорию в этом классе, объявленном в реализации (.m) файл этого класса. Это не то, что я хочу сделать.

Я имею дело с именованной категорией в классе, которая добавляет некоторую функциональность этому классу. Для этой функции мне очень помогло бы иметь частную собственность для использования в моей категории - поэтому обычный способ достижения этого (описанный выше), похоже, не работает для меня. Или это? Пожалуйста, просветите меня!

1 ответ

Решение

Внутри файла реализации вашей категории объявите другую категорию и назовите ее MyCategoryName_Privateи объявите ваши личные свойства там. Обеспечить реализацию -propertyName а также -setPropertyName: методы с использованием связанных объектов.

Например, ваш файл реализации может выглядеть так:

#import "SomeClass+MyCategory.h"
#import <objc/runtime.h>

@interface SomeClass (MyCategory_Private)

@property (nonatomic, strong) id somePrivateProperty;

@end

@implementation SomeClass (MyCategory_Private)

static void *AssociationKey;

- (id)somePrivateProperty 
{
    return objc_getAssociatedObject(self, AssociationKey);
}

- (void)setSomePrivateProperty:(id)arg
{
    objc_setAssociatedObject(self, AssociationKey, arg, OBJC_ASSOCIATION_RETAIN);
}

@end

@implementation SomeClass (MyCategory)

// implement your publicly declared category methods

@end
Другие вопросы по тегам