recherche

Maison  >  Questions et réponses  >  le corps du texte

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 Il y a quelques jours490

répondre à tous(2)je répondrai

  • 我想大声告诉你

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

    Si l'ancienne valeur et la nouvelle valeur sont différentes, vous devez envoyer une notification manuelle. Les objets associés ne peuvent pas synthétiser les méthodes setter, et les méthodes setter doivent être fournies par le programmeur. Lorsque nous utilisons cet attribut, le runtime détecte que nous avons implémenté le setter et ne remplacera pas cette méthode, la notification ne peut donc pas être émise. Cette notification doit donc également être envoyée manuellement

    répondre
    0
  • 怪我咯

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

    Il doit être écrit manuellement et ne sera pas appelé automatiquement.

    répondre
    0
  • Annulerrépondre