我在Apple的一些示例代码中发现了这个构造,用于处理键值观察。添加观察者时,可以添加可以唯一标识KVO调用的上下文(以void *变量的形式) - 如果您希望多个KVO调用触发相同的操作,则特别有用,因为单个上下文可以避免使用一堆链式或语句来检查所有可能性。这是用于声明用于上下文的变量的行:
static void *aContext = &aContext;
它基本上声明了一个引用自身的aContext,为自己分配了自己的内存位置 - 这是一个为KVO上下文创建唯一标识符的绝妙技巧。除了细节之外,我很好奇这究竟叫做什么(自我指定?圆形指针?还有什么?)以及除了KVO之外它还有什么用处。我尝试使用谷歌搜索不同的东西,但我无法想出任何完全相同的东西,缺乏适当的术语。 :)
我肯定会定期使用这个技巧,因为它减少了KVO处理所需的if语句数量,这使它更加优雅。
答案 0 :(得分:2)
我认为这过于复杂和令人困惑。当你想为KVO提供一个唯一的上下文时,只需声明它并使用指向它的指针:
static int kMyObjectPropertyObservationContext;
...
[object addObserver:self
forKeyPath:@"myProperty"
options:0
context:&kMyObjectPropertyObservationContext];
答案 1 :(得分:1)
我认为最准确的描述是“自引用指针”。