2010-04-02 65 views
7

我有一个类属性标题,关键,艺术家等歌没有任何方法。我循环播放歌曲信息数据库并为每个歌曲创建一个歌曲对象,填充属性,然后将歌曲对象存储在NSArray中。Objective C Class or struct?

然后我想,为什么不只是有一个结构宋所有这些相同的属性,而不是一个类的歌曲。这样做会消除类文件,使用类的.m文件中的#import Song行,以及alloc,init,release的需要。

另一方面,我必须将结构定义放在每个可能需要它的类中。 (除非有全局可访问的位置 - 有吗?)另外,一个结构可以存储在NSArray中吗?

回答

18

我会做一个类。一个结构体不能存储在一个NSArray(或其他任何容器类)中,除非你将它包装在一个NSValue中,这可以完成,但有点费劲。

另外,正如您所指出的那样,您必须在某处定义结构。正常的方法是将其定义在头文件(.h)文件中,就像一个类一样。所以在那里没有“收益”。

+0

太棒了,现在我知道了。 – 2010-04-02 15:02:38

+1

结构可以非常有效地存储在NSPointerArray中,无需NSValue(您必须使用各种函数来描述结构)。但是在ARC之下,结构体不能再包含对象,比如NSString:你必须将类似歌曲标题的东西赋予char,这使得结构的用处不大。所以,我正在改为上课。 – 2016-06-30 09:26:13

2

它可以两种方式,但为什么不把你的问题分开,并保存在它自己的类文件?此外,这样做更符合SOLID的单一责任原则。为什么要给你的主类文件另一个改变的理由?打破它。

+0

谢谢,好点。 – 2010-04-02 15:03:38

6

您不能将结构存储在NSArray中(查看其方法的签名 - 它们全部接受并返回对象)。但除此之外,正如我在回答another recent question时所说的,将对象放在结构中几乎总是一个坏主意。对象需要保留和释放,结构没有与它们相关的代码以确保在正确的时间发生。这使得模型对象更有意义。

+0

谢谢,好点。 – 2010-04-02 15:04:10