Objective-C:你在代码中使用@private visibility / access修饰符吗?

时间:2011-01-05 19:06:00

标签: iphone objective-c ios

有3个修饰符:@ private,@ protected(默认)和@public。习惯于用C ++和其他更健全的语言这样做,我总是使用@private作为我的字段。我几乎没有(如果有的话)在Apple的SDK示例中看到它们 - 它们只依赖于默认值。

有一天,我意识到Objective-C继承是相当虚假的特性:从另一个接口导出接口并不意味着所有私有字段现在都可用于重新定义。编译器仍然看到它们并且不允许使用相同的名称定义新的私有字段,这与OOD中的经典封装范例正交。

所以我有点沮丧。也许我对语言的期望过高,因为它只不过是比标准C更高的。

那你在代码中使用@private吗?为什么呢?

4 个答案:

答案 0 :(得分:2)

我想总是使用@private是一个好主意,但我过去从未打扰过,因为除了init和{{1}之外,我几乎都使用属性访问器进行几乎所有的ivar访问} 方法。所以在实践中,我很少遇到错误访问ivars的问题。

此外,如果您的目标是iOS 4+,则在使用dealloc时,无需为属性声明ivars。


我应该注意,如果您正在编写其他开发人员要编写子类的库代码,那么使用@synthesize会更为重要。

答案 1 :(得分:2)

我没有习惯,但除非你运送二元框架,否则其他人会将agianst链接起来并不重要,我很确定你没有这样做。

所有@private都会限制对象结构成员的可见性(像obj->_ivar一样访问,而不是[obj getter]obj.getter)。这是一个很好的健全性检查,因为如果你试图在课外进行它会出错 - 几乎唯一使用直接结构访问的地方是在实施NSCodingNSCopying时仍然有效 - - 但它并没有真正为你买单。

答案 2 :(得分:1)

对于Apple或那些想要在头文件中仅向自己公开某些字段的库的人来说,它才真正有用。我们从不使用它,因为访问器模型允许您公开(或不公开)您想要的内容。既然我有头文件和源文件,那真的有什么好处? Objective-C不是C ++,所以@private有不同的目的。

答案 3 :(得分:1)

在我自1989年以来用Objective-C编写的所有代码中,我从未打扰过使用@public,@protected或@private。