结构或类

时间:2011-06-30 05:53:59

标签: objective-c class iphone-sdk-3.0 struct

我正在开发iPhone 3.1.3应用程序。

我有一个名为Object2D的课程,包括字段和方法;它代表一种形状。 Object2D有一个表示其大小的字段,另一个表示其类型的字段。

现在,我需要另一个名为Pattern的类,它是一组形状。在Pattern我将有一系列形状。从这些形状我只需要它们的大小,类型和它们在模式内的位置,我不需要任何方法。

我想知道最好有一个代表形状的新结构,而不是使用Object2D类。

我问这个是因为我考虑了内存性能。我不确定,但struct比类小,也许最好使用它们而不是类。

您怎么看?

2 个答案:

答案 0 :(得分:20)

如果您正在考虑使用内存,那么差异在几乎所有情况下都可以忽略不计。对象是一个比等效结构更大的指针。

更大的不同在于如何使用它们。对象可以有方法和层次结构,并与Cocoa的其余部分进行交互。使用结构体,您需要为每个结构类型创建自定义函数或将虚拟对象系统组合在一起。最重要的是,任意结构与Cocoa(Touch)的其余部分不能很好地交互。例如:

  • 如果您将对象存储在其中,则必须非常小心地正确进行内存管理
  • 如果不创建对象包装器,则无法将它们存储在NSArrays中(因为NSArray是一个对象数组)。
  • 你不能在Interface Builder中挂起结构 - 它对它们一无所知
  • 您不能使用结构
  • 进行KVO或KVC

通常,如果您正在使用类似Cocoa的框架,那么对象是一个很好的默认选择。一旦你确定你真的需要它们就使用结构。

答案 1 :(得分:4)

Objective-C类实际上是结构体,并且,如果实例变量的排列顺序与结构成员的顺序相同,则唯一的大小差异是NSObject的4或8个字节isa变量。

注意:上面的答案假设遗留的Objective-C运行时,不使用@property@synthesize指令,这可能会影响它们的大小。