使用关联对象与类别实现文件中定义的静态对象相比有什么好处?

What is the benefit of using associated objects vs static object defined in the category implementation file?

问题是我看不出使用关联对象与使用 getter/setter 方法在类别实现文件中定义的静态对象相比有什么好处。

我在考虑在类别的头文件中定义getters和setters。像这样:

@interface NSObject (test_static)

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

@end

然后在实现文件中声明一个静态变量并实现getter/setter方法,像这样:

static id test;

@implementation NSObject (test_static)

- (id)getStaticObject
{
    return test;
}

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

为什么我不应该使用这种方法而是使用关联对象?

好吧,我想我不了解属性的工作原理以及它们如何解决脆弱的基础 class 问题。也许是有关...

差别很大。关联对象是一种模拟类别属性的方法。

使用单个静态变量意味着所有实例都使用一个共享值。

选择使用哪个取决于您的目标。如果您希望从两个类别方法中获得特定于实例的结果,请不要使用静态变量 - 使用关联对象。如果你想从两个类别方法返回同一个对象而不考虑对象实例,那么使用静态变量(并且可能将你的类别方法更改为 class 方法而不是实例方法)。