Данные поступают с сервера в JSON, который помещается в NSDictionary
. В зависимости от типа запрашиваемых данных из этого NSDictionary
будет создан новый объект класса. Пришло много данных, поэтому объект содержит ссылку на NSDictionary
и извлекает значение только при обращении к определенной переменной. Что-то вроде отложенной инициализации:Lazy инициализация в iOS
- (NSString *)imgURL {
if (_imgURL == nil) {
_imgURL = [self makeObjForKey:kImageURL];
}
return _imgURL;
}
Это значительно увеличивает скорость приложения, но создает другие проблемы:
- Если значение отсутствует в
NSDictionary
, остается нулевым. Затем для каждого последующего вызова этой переменной происходит поиск вNSDictionary
. - При копировании всего экземпляра класса (протокол
NSCopying
) все переменные копируются, производя преобразование всегоNSDictionary
.
Решения:
- Помещенный некоторый флаг, указывающий, что значение было проверено. Но тогда вы должны добавить дополнительные проверки
- только скопировать
NSDictionary
для экземпляра объекта, но потом придется разобрать те же переменные снова
В любом случае эти решения не являются оптимальными. Возможно, кто-то столкнулся с подобной проблемой и может посоветовать другие методы.
Я согласен с ответом Роба Напира. Убедитесь, что существует необходимость оптимизировать вызовы в NSDictionary. Попробуйте просмотреть свой код (с помощью инструментов) и посмотреть время, которое вызывает NSDictionary. Это, скорее всего, будет незначительным. – FreeNickname