0

Проблема заключается в том, что я не вижу преимущества использования связанных объектов против статических объектов, определенных в файле реализации категории с методами getter/setter.В чем преимущество использования связанных объектов против статического объекта, определенного в файле реализации категории?

Я думал об определении геттеров и сеттеров в заголовочном файле категории. Как это:

@interface NSObject (test_static) 

- (id)getStaticObject; 
- (void)setStaticObject:(id)a_static; 

@end 

, а затем объявить статическую переменную в файле реализации и реализации методов геттер/сеттер, как это:

static id test; 

@implementation NSObject (test_static) 

- (id)getStaticObject 
{ 
    return test; 
} 

- (void)setStaticObject:(id)a_static 
{ 
    test = a_static; 
} 

Почему я не должен использовать этот подход и использовать связанные объекты вместо этого?

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

ответ

1

Существует огромная разница. Связанные объекты - способ имитации свойств в категории.

Использование одной статической переменной означает, что у вас есть одно общее значение, используемое во всех экземплярах.

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