【问题标题】:@private - using it or not?@private - 使用与否?
【发布时间】:2012-11-06 19:45:12
【问题描述】:

当您独自工作或与可以访问应用程序的所有属性、ivars 的团队一起工作时,在 Xcode 中使用 @private 指令有什么意义?

有内存使用、性能等方面的优势吗?或者这只是为大型团队准备的东西,其中一部分不应该使用将来会改变的东西?

谢谢

【问题讨论】:

    标签: objective-c cocoa-touch class-design encapsulation private-members


    【解决方案1】:

    在类声明的@interface 中使用@private 可确保没有其他类可以访问这些ivars。这对于封装很重要。这对于单个开发人员和由数十名开发人员组成的团队同样重要。

    封装可确保您仅将提供的 API 用于某个类,而无需了解其内部工作方式。一段时间后,您可能希望更改实施。这应该对任何已经使用该类的类没有影响。 API 不会改变,只会改变它的实现。

    请记住,ivars 只能在给定类的实现中访问。没有其他类应该有权访问这些 ivars。否则您的代码会变得非常脆弱且难以维护。

    编辑:使用现代 Objective-C,您甚至不应该在 .h 文件中有任何 ivars。将它们移到@implementation 行,保证它们是私有的,使用 .h 文件的人甚至都不知道你有什么 ivars。

    【讨论】:

    • 什么?你的意思是我所有来自 .h 的漂亮 ivars 都必须转到 .m 吗? ಠ_ಠ 这是另一件我从未完全理解的事情。为什么有些程序员用相同的名称声明 ivars 和属性?就我一直认为的,一旦你声明了一个属性,你就不需要一个同名的 ivar……对吧?
    • 我没有说你必须将 ivars 从 .h 移动到 .m。我说你应该这样做,因为它进一步促进了封装。使用现代的 Objective-C,你可以用 @property 声明一个属性,你就完成了。在此之前,需要使用@property@synthesize,并声明一个 ivar。因此,无论何时你看到它,它都是使用较旧的编译器编写的代码,或者是由尚未开始使用最新编译器的新功能的人编写的代码。
    • 好的,谢谢,但我不是在谈论“@synthesize”,我说的是在 .h 上声明 ivars 的人,在“@interface”部分,然后用相同的方式声明属性名称也在 .h 中,然后在 .m 中使用“@synthesize variable = _variable;”之类的“@synthesize”。
    • 这就是我所说的。在现代 Objective-C 编译器开始允许我们只使用 @property 之前,这曾经是必需的。
    • 在哪里可以了解这些更改以及如何使我的代码现代化?再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2019-03-23
    • 2017-10-13
    • 2011-06-01
    • 1970-01-01
    • 2021-08-21
    • 2019-12-30
    相关资源
    最近更新 更多