我在一些 Apple 处理键值观察的示例代码中发现了这个结构。添加观察者时,您可以添加可以唯一标识 KVO 调用的上下文(以 void* 变量的形式) - 如果您希望多个 KVO 调用触发相同的操作,则特别有用,因为单个上下文可以避免使用一堆链接或语句来检查所有的可能性。这是用于声明用于上下文的变量的行:
static void *aContext = &aContext;
它基本上是声明 aContext 来引用自己,为自己分配自己的内存位置——这是一个为 KVO 上下文创建唯一标识符的绝妙技巧。抛开细节不谈,我很好奇这到底叫什么(自赋值?循环指针?别的什么?)以及它除了 KVO 之外还有什么其他用途。我尝试用谷歌搜索不同的东西,但由于缺乏正确的术语,我无法想出完全类似的东西。:)
我肯定会定期使用这个技巧,因为它减少了 KVO 处理所需的 if 语句的数量,这使它更加优雅。