Objective c 自定义设置程序能否打破KVO模式?打破或复制模式?
在Objective-C中,我想知道自定义setter是否会覆盖KVO支持(willChangeValueForKey:和didChangeValueForKey;),我是否需要在自定义setter中显式地包含对这些的调用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
保留和复制呢?对于具有保留或复制属性的属性(对于非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: