比如?
- (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);
}
我想大声告诉你2017-05-02 09:29:56
古い値と新しい値が異なる場合は、通知を手動で送信する必要があります。関連オブジェクトはセッター メソッドを合成できないため、プログラマがセッター メソッドを指定する必要があります。この属性を kvo すると、ランタイムはセッターを実装したことを検出し、このメソッドをオーバーライドしないため、通知を発行できません。したがって、この通知も手動で送信する必要があります