objective-c – 回应setter

objective-c – 回应setter,第1张

概述调用属性设置器时,响应数据更改的最佳方法是什么.例如,如果我有一个名为data的属性,那么当调用[object setData:newData]并仍然使用合成的setter时,我该如何反应.本能地,我会像这样覆盖合成的setter: - (void)setData:(DataObject *)newData { // defer to synthesised setter [sup 调用属性设置器时,响应数据更改的最佳方法是什么.例如,如果我有一个名为data的属性,那么当调用[object setData:newData]并仍然使用合成的setter时,我该如何反应.本能地,我会像这样覆盖合成的setter:

- (voID)setData:(DataObject *)newData {    // defer to synthesised setter    [super setData:newData];    // react to new data    ...}

…但当然这没有意义 – 我不能像这样使用超级.那么处理这种情况的最佳方法是什么?我应该使用KVO吗?或者是其他东西?

解决方法 根据您想要的控制程度,有几种不同的方法可以做到这一点.一种方法是观察你自己的财产:

[self addobserver:self forKeyPath:@"data" options:0 context:nil];- (voID)observeValueForKeyPath:(Nsstring *)path ofObject:(ID)object change:(NSDictionary *)change context:(voID *)context {    if(object == self && [path isEqualToString:@"data"]) {        //handle change here    } else [super observeValueForKeyPath:path ofObject:object change:change context:context];}

如果不是之前,请确保在dealloc或finalize方法中将自己移除为观察者.

另一种方法是覆盖-dIDChangeValueForKey:.但是,如果对象上没有观察者,则可能无法调用此方法.

- (voID)dIDChangeValueForKey:(Nsstring *)key {    [super dIDChangeValueForKey:key];    if([key isEqualToString:@"data"]) {        //handle change here    }}
总结

以上是内存溢出为你收集整理的objective-c – 回应setter全部内容,希望文章能够帮你解决objective-c – 回应setter所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1003631.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存