【问题标题】:Objective C Class or struct?目标 C 类或结构?
【发布时间】:2010-04-02 14:39:14
【问题描述】:

我有一个带有属性 Title、Key、Artist 等的 Song 类。没有方法。我遍历一个歌曲信息数据库并为每个歌曲创建一个对象,填充属性,然后将歌曲对象存储在一个 NSArray 中。

然后我想,为什么不使用具有所有这些相同属性的结构 Song 而不是类 Song。这样做会消除类文件、使用类的 .m 文件中的#import Song 行,以及分配、初始化、释放的需要。

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

【问题讨论】:

    标签: objective-c class struct nsarray


    【解决方案1】:

    我会在课堂上做到这一点。结构不能存储在 NSArray(或任何其他容器类)中,除非您将其包装在 NSValue 中,这可以做到但有点繁琐。

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

    【讨论】:

    • 一个结构可以非常有效地存储在一个没有 NSValue 的 NSPointerArray 中(你必须使用各种函数来描述结构)。但是在 ARC 下,结构不能再包含对象,例如 NSString:您必须将歌曲标题之类的东西转换为 char,这使得结构的用处大大降低。所以,我要换班了。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      它可以是双向的,但为什么不将你的关注点分开并将其保存在它自己的类文件中呢?另外,这样做更符合 SOLID 的单一职责原则。为什么要给你的主类文件另一个改变的理由?打破它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-13
        • 2011-12-30
        • 1970-01-01
        • 2016-01-31
        • 1970-01-01
        • 2016-07-10
        相关资源
        最近更新 更多