16

我在一些 Apple 处理键值观察的示例代码中发现了这个结构。添加观察者时,您可以添加可以唯一标识 KVO 调用的上下文(以 void* 变量的形式) - 如果您希望多个 KVO 调用触发相同的操作,则特别有用,因为单个上下文可以避免使用一堆链接或语句来检查所有的可能性。这是用于声明用于上下文的变量的行:

static void *aContext = &aContext;

它基本上是声明 aContext 来引用自己,为自己分配自己的内存位置——这是一个为 KVO 上下文创建唯一标识符的绝妙技巧。抛开细节不谈,我很好奇这到底叫什么(自赋值?循环指针?别的什么?)以及它除了 KVO 之外还有什么其他用途。我尝试用谷歌搜索不同的东西,但由于缺乏正确的术语,我无法想出完全类似的东西。:)

我肯定会定期使用这个技巧,因为它减少了 KVO 处理所需的 if 语句的数量,这使它更加优雅。

4

2 回答 2

2

我认为这过于复杂和令人困惑。当你想为 KVO 提供一个唯一的上下文时,只需声明它并使用指向它的指针:

static int kMyObjectPropertyObservationContext;

...

[object addObserver:self
         forKeyPath:@"myProperty"
            options:0
            context:&kMyObjectPropertyObservationContext];
于 2013-05-07T07:46:36.520 回答
1

我认为最准确的描述是“自引用指针”。

于 2013-05-02T14:24:17.097 回答