2

我注意到很多 Apple 的接口@private在它们的实例变量声明之前使用。这样做有很好的设计理由吗?这是我应该做的吗?

4

3 回答 3

4

私有实例变量用于将接口与实现分开。在 Objective-C 中,由于类声明必须显示所有实例变量,因此需要有一种方法来防止子类访问属于内部实现的子类。否则,其他程序员可能会编写依赖于这些内部变量的代码,这将使类设计者无法在不破坏现有代码的情况下对类内部进行更改。

换个角度看,没有标记为私有的实例变量是与子类程序员契约的一部分,而标记为私有的则不是。

这意味着实例变量通常应该被标记为私有,以便它们只能通过它们的访问器方法访问,如果有的话。否则,有人可以轻松地编写您的类的子类,并简单地创建一个访问器来公开任何实例变量。

于 2009-12-19T17:16:40.477 回答
1

如果您不希望子类能够访问变量,请将它们标记为@private。

于 2009-12-19T16:59:45.760 回答
0

另一种方法是在@implementation 部分中声明实例变量。这些变量是隐式私有的。资料来源:Kochan:Objective-C 编程,第四版。页。199. 因此,如 e.James 所述,类声明必须显示所有实例变量是不正确的。

在@interface 中声明实例变量的唯一原因是允许它们被派生类(子类)继承。

于 2012-01-16T19:01:07.783 回答