Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 自定义设置程序能否打破KVO模式?打破或复制模式?_Objective C_Properties_Key Value Observing - Fatal编程技术网

Objective c 自定义设置程序能否打破KVO模式?打破或复制模式?

Objective c 自定义设置程序能否打破KVO模式?打破或复制模式?,objective-c,properties,key-value-observing,Objective C,Properties,Key Value Observing,在Objective-C中,我想知道自定义setter是否会覆盖KVO支持(willChangeValueForKey:和didChangeValueForKey;),我是否需要在自定义setter中显式地包含对这些的调用 保留和复制呢?对于具有保留或复制属性的属性(对于非ARC代码),我是否需要在setter中明确包含release和retain或copy?如果您的访问器采用标准格式(-setFoo:和-foo),KVO将自动工作。保留和复制,但是,您需要在自定义访问器中管理自己 这是因为re

在Objective-C中,我想知道自定义setter是否会覆盖KVO支持(willChangeValueForKey:和didChangeValueForKey;),我是否需要在自定义setter中显式地包含对这些的调用


保留和复制呢?对于具有保留或复制属性的属性(对于非ARC代码),我是否需要在setter中明确包含release和retain或copy?如果您的访问器采用标准格式(
-setFoo:
-foo
),KVO将自动工作。保留和复制,但是,您需要在自定义访问器中管理自己

这是因为retain和copy是合成访问器的一部分,而KVO仅基于方法名。检查KVO兼容方法命名的完整说明。

状态:

NSObject提供了自动支持,默认情况下,该支持可用于键值编码类的所有属性 顺从的通常,如果您遵循标准的Cocoa编码和命名 按照惯例,您可以使用您没有的自动更改通知 编写任何附加代码

如果您有一个setter,只需遵守命名约定即可

关于复制/保留:

- (void)setFoo:(id)bar {
  @synchronized (self) { // synchronize if you have to, can be omitted in most cases
    if (bar_ != bar) { // bar_ is the ivar
      [bar_ release]; // omit in ARC
      bar_ = [bar copy]; // resp. retain in other variant
    }
  }
}
如果您的setter不符合准则,请查看“手动更改通知”部分。

了解如何正确实现自己的getter/setter: