objective-c - Objectiv-C KVO 要不要在set方法中手动实现 willchange/didChange?
漂亮男人
漂亮男人 2017-05-02 09:27:56
0
2
486

比如?

- (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)
我想大声告诉你

古い値と新しい値が異なる場合は、通知を手動で送信する必要があります。関連オブジェクトはセッター メソッドを合成できないため、プログラマがセッター メソッドを指定する必要があります。この属性を kvo すると、ランタイムはセッターを実装したことを検出し、このメソッドをオーバーライドしないため、通知を発行できません。したがって、この通知も手動で送信する必要があります

いいねを押す +0
刘奇

これは手動で記述する必要があり、自動的には呼び出されません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート