Objective-C 变量...指向它自己?
Posted
技术标签:
【中文标题】Objective-C 变量...指向它自己?【英文标题】:Objective-C variable... pointing to itself? 【发布时间】:2013-04-22 15:04:15 【问题描述】:我在 Apple 处理键值观察的一些示例代码中发现了这种结构。添加观察者时,您可以添加可以唯一标识 KVO 调用的上下文(以 void* 变量的形式) - 如果您希望多个 KVO 调用触发相同的操作,则特别有用,因为单个上下文可以避免使用一堆链接或语句来检查所有的可能性。这是用于声明用于上下文的变量的行:
static void *aContext = &aContext;
它基本上是在声明 aContext 来引用自己,为自己分配自己的内存位置——这是一个为 KVO 上下文创建唯一标识符的绝妙技巧。抛开细节不谈,我很好奇这到底叫什么(自赋值?循环指针?别的什么?)以及它除了 KVO 之外还有什么其他用途。我尝试用谷歌搜索不同的东西,但由于缺乏正确的术语,我无法想出完全类似的东西。 :)
我肯定会经常使用这个技巧,因为它减少了 KVO 处理所需的 if 语句的数量,这使它更加优雅。
【问题讨论】:
我也喜欢这个技巧(感谢您指出),但说实话,它并不比static char *aContext = "anything" ;
简单多少,它的工作原理相同。
***.com/questions/2532102/…
根据***.com/a/2532108/834998,这在长度为 1 的循环列表中也可能有用。就我个人而言,我不会称其为惊人的技巧;只要您以相同的方式创建所有其他唯一标识符,这只是获取对于应用程序的当前执行有效的唯一标识符的简单方法。
正如@Jonathan 所说,它是自我引用的。更多的讨论可以在cocoa dev list找到。
【参考方案1】:
我认为这过于复杂和令人困惑。如果您想为 KVO 提供一个唯一的上下文,只需声明它并使用指向它的指针:
static int kMyObjectPropertyObservationContext;
...
[object addObserver:self
forKeyPath:@"myProperty"
options:0
context:&kMyObjectPropertyObservationContext];
【讨论】:
【参考方案2】:我认为最准确的描述是“自引用指针”。
【讨论】:
以上是关于Objective-C 变量...指向它自己?的主要内容,如果未能解决你的问题,请参考以下文章