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

Я знаю о возможности объявления частных свойств в классе, помещая их внутри неназванной категории в этот класс, объявленный в файле реализации (.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