typedef struct vs. Object - 好处

时间:2013-03-12 10:30:55

标签: ios objective-c struct

我打算定义一个类,它的属性中包含x / y网格的坐标。但是,我不确定采用这种设计的“最佳”方法。这是一个非常简单的问题,我只是想正确地做到并且有正当理由!

一个解决方案是在对象中有两个属性,类型为“int”,一个用于x,一个用于y。

另一个是定义包含x / y值的两个int的typedef结构并命名为<ClassPrefix>Coordinate。与CGSize相似?

还有其他/更好的方法吗?哪个更受欢迎?不知道如何证明这两种方式的合理性。

谢谢!

3 个答案:

答案 0 :(得分:11)

“哪一个更受欢迎?”的答案问题取决于几个因素:

  • 您计划创建多少这样的项目? - 如果答案是“数百万”,struct获胜;如果答案是“五十八”,则对象获胜。
  • 您是否需要在其上定义方法? - 如果答案为“是”,则对象获胜;否则,struct可能没问题。
  • 您打算定义它的数组吗? - 如果答案为“是”,struct可能是更好的选择。
  • 您是否需要经常创建和销毁它? - 如果答案为“是”,struct可能是更好的选择。

最终,您的设计限制可帮助您确定最佳效果;没有普遍“更好”的数据结构。

答案 1 :(得分:4)

除了@dasblinkenlight回答,我还会给你一些决定建议:

  • 创建后结构是否不可变?使用对象。

  • 结构是否拥有(=保留)指向其他对象或数组(C数组或NSArray)的指针?它是否与对象交互(=具有带对象参数的方法)?
    然后使用对象。

  • 结构是否只包含基本类型(intfloat,其他struct等)并且它只与其他基元/结构交互?
    然后使用带有函数的struct

答案 2 :(得分:1)

这是一种权衡。

一个类及其实例将在资源上花费更多,特别是当你必须制作它们时。如果不会有这么多实例,那就不是问题了。

结构更快但很难扩展,最不方便的是结构不能容纳对象或方法。

对于您的示例,如果您只是将它用于坐标,我建议您使用struct。但这取决于您的设计和代码。没有绝对的判断是最好的。