0

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

我正在考虑在类别的头文件中定义 getter 和 setter。像这样:

@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;
}

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

好吧,我想我不明白属性是如何工作的,以及它们是如何解决脆弱的基类问题的。可能有关系...

4

1 回答 1

1

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

使用单个静态变量意味着您可以在所有实例中使用单个共享值。

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

于 2015-05-01T16:56:16.953 回答