Использование -setValue: forKey: vs & # 8220; object.var = & # 8230; & # 8221;
-
05-07-2019 - |
Вопрос
Разница между этими двумя строками кода заключается в том, что вторая соответствует KVO, а первая - нет?
[person setValue:tempPerson.name forKey:@"name"];
person.name = tempPerson.name;
Причина, по которой я спрашиваю, состоит в том, что мне нужно обновить 60 атрибутов для более чем 500 объектов, и я не хочу, чтобы уведомления KVO содержали более нескольких атрибутов.
Я использую NSFecthedResultsController для своего UITableView и не хочу вызывать чрезмерное setNeedDisplay для ячеек.
Решение
Нет разницы между двумя строками в том, что касается наблюдения значения ключа. Оба запускают уведомления KVO по умолчанию. Вы можете изменить это поведение. Из руководства по программированию KVO от Apple:
Вы можете управлять автоматическими уведомлениями наблюдателя о свойствах вашего подкласса, реализовав метод класса
automaticNotifiesObserversForKey:
. Подклассы могут проверять ключ, переданный в качестве параметра, и возвращать YES, если автоматическое уведомление должно быть включено, NO, если оно должно быть отключено.