Производительность - структуры в NSValue vs контейнерный объект - PullRequest
3 голосов
/ 19 июля 2010

В ситуации, когда мне нужно сохранить все элементы данных в NSDictionary, имеет ли смысл помещать структуры (пользовательские типы или даже скаляры, например CGPoint) в мою собственную оболочку (не NSValue) , поэтому я могу избежать накладных расходов на кодирование / декодирование каждый раз, когда получаю или устанавливаю элемент?

Для больших структур (16 поплавков) экономия значительна по IMO. Но даже с CGPoint я бы сэкономил 4 байта копирования плюс время кодирования / декодирования.

Ответы [ 3 ]

3 голосов
/ 19 июля 2010

Почему бы просто не измерить это для вашего конкретного случая? Это единственный действительно надежный способ выяснить это.

Если обоих вариантов недостаточно, вы можете заглянуть в CFDictionary с указателями на простые структуры, установив соответственно обратные вызовы value или взять C ++ std::map / std::tr1::unordered_map для вращения (если вы не против смешивания в C ++, то есть).

3 голосов
/ 19 июля 2010

На самом деле вы можете пойти еще дальше: полностью отказаться от структуры и сделать ее модельным объектом. Затем вы можете интегрировать логику (например, вычисленные свойства) в нее и дать ей возможность кодировать и декодировать себя в любых соответствующих форматах, а также помещать ее в коллекции.

1 голос
/ 19 июля 2010

Ну, для типов NSDictionary требуются объекты в качестве их членов, так что вы не можете сохранить структуру в NSDictionary.Вам нужно будет обернуть его в контейнерный объект.

...