Использование -setValue:forKey: vs "object.var = ..."

Разница между этими двумя строками кода в том, что вторая совместима с KVO, а первая нет?

[person setValue:tempPerson.name forKey:@"name"];
person.name = tempPerson.name;

Причина, по которой я спрашиваю, заключается в том, что мне нужно обновить 60 атрибутов на более чем 500 объектах, и я не хочу, чтобы уведомления KVO содержали более нескольких атрибутов.

Я использую NSFecthedResultsController для своего UITableView, и я не хочу вызывать чрезмерное setNeedDisplay на ячейках.

1 ответ

Решение

Нет никакой разницы между двумя строками в том, что касается наблюдения значения ключа. Оба запускают уведомления KVO по умолчанию. Вы можете изменить это поведение. Из Apple's KVO Руководство по программированию:

Вы можете контролировать автоматические уведомления наблюдателя для свойств вашего подкласса, реализуя метод класса automaticallyNotifiesObserversForKey:, Подклассы могут проверять ключ, переданный в качестве параметра, и возвращать YES, если автоматическое уведомление должно быть включено, NO, если оно должно быть отключено.

Другие вопросы по тегам