性能 - NSValue与容器对象中的结构

时间:2010-07-19 02:31:49

标签: ios objective-c cocoa cgpoint nsvalue

在我需要在NSDictionary中保存所有数据成员的情况下,将结构(自定义类型,甚至标量,即CGPoint)放入我自己的包装器中是否更有意义(不是NSValue),所以每次获得或设置成员时,我都可以避免编码/解码它的开销吗?

对于大型结构(16个浮标),节省的成本非常高。但即使使用CGPoint,我也会节省4个字节的复制时间和编码/解码时间。

3 个答案:

答案 0 :(得分:3)

为什么不根据具体情况进行衡量?这是找到它的唯一真正可靠的方法。

如果两个选项都不够,您可以通过相应地设置value callbacks或使用C ++ CFDictionary / std::map进行旋转来查看std::tr1::unordered_map指向普通结构的指针(如果你不介意用C ++混合)。

答案 1 :(得分:3)

您可能更进一步:完全放弃结构并使其成为模型对象。然后,您可以将逻辑(例如,计算属性)集成到其中,并使其能够以任何相关格式对自身进行编码和解码,并将其放入集合中。

答案 2 :(得分:1)

嗯,NSDictionary类型无论如何都要求对象作为其成员,因此您无法在NSDictionary中存储结构。你必须把它包装在一个容器对象中。