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

static void *aContext = &aContext;

它基本上声明ACONTATE引用自己,分配自己的内存位置,这是为KVO上下文创建唯一标识符的绝妙技巧。撇开细节不谈,我很好奇这到底叫什么(自我分配)?圆形指针?还有别的吗?)除了kvo,它还有什么其他用途。我试着在谷歌上搜索不同的东西,但由于缺乏恰当的术语,我无法找到完全像这样的东西。:)
我肯定会经常使用这个技巧,因为它减少了处理kvo所需的if语句的数量,这使它更加优雅。

最佳答案

我认为这过于复杂和混乱。当您想要kvo的唯一上下文时,只需声明它并使用指向它的指针:

static int kMyObjectPropertyObservationContext;

...

[object addObserver:self
         forKeyPath:@"myProperty"
            options:0
            context:&kMyObjectPropertyObservationContext];

关于objective-c - Objective-C变量……指向自身?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16270323/

10-11 21:31