我有一首带有Title,Key,Artist等属性的歌曲。没有方法。我遍历一个歌曲信息数据库并为每个创建一个Song对象,填充属性,然后将Song对象存储在NSArray中。
然后我想,为什么不只是拥有一个具有所有相同属性而不是类Song的结构歌曲。这样做会消除类文件,using类的.m文件中的#import Song行,以及需要alloc,init,release。
另一方面,我必须将struct定义放在可能需要它的每个类中。 (除非有一些全局可访问的位置 - 是否存在?)此外,结构是否可以存储在NSArray中?
答案 0 :(得分:19)
我会用一堂课来做。结构不能存储在NSArray(或任何其他容器类中),除非你将它包装在NSValue中,这可以完成,但有点繁琐。
另外,正如您所指出的,您必须在某处定义结构。通常的方法是在标题(.h)文件中定义它,就像类一样。所以那里的结构没有“收益”。
答案 1 :(得分:6)
您无法在NSArray中存储结构(查看其方法的签名 - 它们都采用并返回对象)。但除此之外,正如我在another recent question的答案中所说的那样,将对象放在结构体中总是一个坏主意。需要保留和释放对象,并且结构没有与它们相关联的代码,以确保在正确的时间发生。这作为模型对象更有意义。
答案 2 :(得分:2)
这可能是双向的,但为什么不将你的问题分开并将其保存在自己的类文件中呢?此外,这样做更符合SOLID的单一责任原则。为什么要给你的主类文件另一个改变的理由?打破它。