objective-c - Objectiv-C KVO 要不要在set方法中手动实现 willchange/didChange?
漂亮男人
漂亮男人 2017-05-02 09:27:56
[iOS讨论组]

比如?

- (void)setNow:(NSDate *)aDate {
    [self willChangeValueForKey:@"now"];
    _now = aDate;
    [self didChangeValueForKey:@"now"];
}

还是直接

- (void)setNow:(NSDate *)aDate {
    
    _now = aDate;
    //自动调用 willChange didChange方法?
}

2 如果在category里用runtime增加一个属性时,如果需要使用KVO,需要手动使用这两个方法么?

-(void)setStr:(NSString *)str  
{  //这里需要手动使用 willChange didChange么?
    objc_setAssociatedObject(self, & strKey, str, OBJC_ASSOCIATION_COPY);  
}  
漂亮男人
漂亮男人

全部回复(2)
我想大声告诉你

如果旧值和新值不一样,是需要手动发出通知的。关联对象无法合成setter方法,setter方法必须由程序员给出。当我们kvo这个属性时,运行时检测到我们已经实现了setter,就不会覆盖这个方法,因此无法发出通知。所以这个通知也是需要手动发出的

怪我咯

要手动写,不会自动调用的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号