Objective-C 类还是结构体?

7
我有一个类Song,具有Title、Key、Artist等属性,没有方法。我遍历歌曲信息数据库,为每个创建一个Song对象,填充属性,然后将Song对象存储在NSArray中。
然后我想,为什么不只使用具有相同属性的结构体Song,而不是类Song。这样做可以消除类文件、using类的.m文件中的#import Song行以及alloc、init、release的需要。
另一方面,我必须在可能需要它的每个类中放置struct定义。(除非有一些全局可访问的位置——是否有?)此外,结构体能否存储在NSArray中?
3个回答

20

我建议使用类进行操作。结构体不能被存储在NSArray(或其他容器类)中,除非您将其包装在NSValue中。虽然这可以实现,但有点繁琐。

另外,正如您所指出的那样,您必须在某个地方定义该结构体。通常的做法是在头文件(.h)中定义它,就像定义类一样。因此,在这方面,结构体没有任何“优势”。


1
一个结构体可以在不使用NSValue的情况下相当有效地存储在NSPointerArray中(您必须使用各种函数描述结构体)。但是在ARC下,结构体不能再包含诸如NSString之类的对象:您必须将类似歌曲标题的东西转换为char,这使得结构体的用途大大减少。因此,我正在改用类。 - Elise van Looij

7

你不能将结构体存储在NSArray中(查看其方法的签名-它们都采用并返回对象)。但除此之外,正如我在回答另一个最近的问题中所说,将对象放入结构体几乎总是一个坏主意。对象需要被保留和释放,而结构体没有与之相关的代码来确保这些操作发生在正确的时间。这更适合作为模型对象。


2

这可以两种方式实现,但为什么不将其拆分到单独的类文件中以便关注点分离呢?而且,这样做更符合 SOLID 的单一责任原则。为什么要给主类文件增加另一个改变的理由呢?把它拆分出来吧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接