1

我读了这篇文章:http ://www.koboldtouch.com/display/IDCAR/Use+Classes+Instead+of+Structs

我已经在考虑我想在我的 ObjC 应用程序中使用类而不是结构,但是文章说它需要更多的内存。

我还阅读了这个问题的选择答案: Class vs Struct for data only? 它说类中的变量默认为私有,但对于 C++,它们在 ObjC 中默认为私有吗?我认为不是因为如果我在 ObjC 中有一个 @property,那么我可以从另一个对象访问它。

最后,如果我只是要创建一个只实现 C 结构的对象,那么使用 @public {} 和 @property 有什么区别?

编辑

对于未来的读者来说,这三个答案都需要阅读,他们都回答了这个问题,但我必须选择并回答,所以这就是我选择一个的原因。

4

3 回答 3

3

与 a 相比,我不会担心 Objective-C 类的额外内存需求struct,除非您将大量对象存储在内存中。那么它可能值得考虑。使用 Objective-C 类可以获得其他好处。

WRT 到公共与财产;您不希望对象之外的代码“通常”弄乱您的实例变量。在某些情况下,这并不重要,您可以使用@property/@synthesize而不用担心,但是有时您可能想要验证分配的值或在分配特定值时执行某些操作。从一开始就使用属性允许您稍后更改它,而不会影响使用您的类的任何代码。

于 2013-11-12T16:39:52.837 回答
2

先用简单的方法做,然后如果你发现分析实际运行的代码内存占用太大,那么重新考虑......

基本上 Obj-C 类是一个结构。它是一个结构,具有指向类对象的指针,以及由超类和该类声明的所有 ivars。

通过使用类和对象来简化内存管理,您会获得很多好处,而如果不使用集合类,您将是愚蠢的(除非在非常特殊的情况下)

对于第二个问题......您通常总是希望使用属性obj->iVar

这可以保持封装,还允许对 setter 进行验证......并且还会触发 KVO 通知。

所以基本上:

除非您有理由不这样做,否则请使用对象/类。
使用属性,除非你有理由不这样做。

于 2013-11-12T16:45:29.063 回答
2

它说类中的变量默认为私有,但对于 C++,它们在 ObjC 中默认为私有吗?

@interface在 Objective-C 中声明的实例变量默认为@protected. @implementation在 Objective-C 中声明的实例变量默认为@private. 您可以手动使用@public, @protected@private就像在 C++ 中一样。

我认为不是因为如果我在 ObjC 中有一个 @property,那么我可以从另一个对象访问它。

属性访问是调用一个方法。它与实例变量访问完全不同。

于 2013-11-13T02:05:11.427 回答