在我需要在NSDictionary
中保存所有数据成员的情况下,将结构(自定义类型,甚至标量,即CGPoint
)放入我自己的包装器中是否更有意义(不是NSValue
),所以每次获得或设置成员时,我都可以避免编码/解码它的开销吗?
对于大型结构(16个浮标),节省的成本非常高。但即使使用CGPoint
,我也会节省4个字节的复制时间和编码/解码时间。
答案 0 :(得分:3)
为什么不根据具体情况进行衡量?这是找到它的唯一真正可靠的方法。
如果两个选项都不够,您可以通过相应地设置value callbacks或使用C ++ CFDictionary
/ std::map
进行旋转来查看std::tr1::unordered_map
指向普通结构的指针(如果你不介意用C ++混合)。
答案 1 :(得分:3)
您可能更进一步:完全放弃结构并使其成为模型对象。然后,您可以将逻辑(例如,计算属性)集成到其中,并使其能够以任何相关格式对自身进行编码和解码,并将其放入集合中。
答案 2 :(得分:1)
嗯,NSDictionary类型无论如何都要求对象作为其成员,因此您无法在NSDictionary中存储结构。你必须把它包装在一个容器对象中。