结构或类

Van*_*nel 6 struct class objective-c iphone-sdk-3.0

我正在开发一个iPhone 3.1.3应用程序.

我有一个叫做Object2D田野和方法的班级; 它代表一种形状.Object2D有一个代表其大小的字段,另一个代表其类型的字段.

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

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

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

你怎么看?

Chu*_*uck 20

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

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

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

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


NSG*_*God 5

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

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