我在苹果的一些示例代码中发现了这个结构,用于处理键值观察。添加观察者时,可以添加一个上下文(以void*变量的形式),可以唯一地标识KVO调用-如果您希望多个KVO调用触发相同的操作,则特别有用,因为单个上下文可以避免使用一堆链接或语句来检查所有可能性。这是用于声明用于上下文的变量的行:
static void *aContext = &aContext;
这基本上是在声明一个 aContext 来引用自身,将其自己的内存位置赋值给自己 - 这是一个聪明的技巧,可以为 KVO 上下文创建一个唯一标识符。具体细节先不管,我想知道这到底叫什么(自赋值?循环指针?还是其他什么?),以及除了 KVO 之外是否还有其他用途。我尝试过谷歌搜索不同的东西,但因缺乏正确的术语而无法找到类似的内容。 :)
我肯定会经常使用这个技巧,因为它减少了 KVO 处理所需的 if 语句数量,使代码更加优雅。
static char *aContext = "anything" ;
简单多少,两者的作用方式是相同的。 - Monolo