搜尋

首頁  >  問答  >  主體

objective-c - Objectiv-C KVO 要不要在set方法中手動實作 willchange/didChange?

比如?

- (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);  
}  
漂亮男人漂亮男人2757 天前483

全部回覆(2)我來回復

  • 我想大声告诉你

    我想大声告诉你2017-05-02 09:29:56

    如果舊值和新值不一樣,是需要手動發出通知的。關聯物件無法合成setter方法,setter方法必須由程式設計師給出。當我們kvo這個屬性時,執行時間偵測到我們已經實作了setter,就不會覆寫這個方法,因此無法發出通知。所以這個通知也是需要手動發出的

    回覆
    0
  • 怪我咯

    怪我咯2017-05-02 09:29:56

    要手動寫,不會自動呼叫的。

    回覆
    0
  • 取消回覆