我注意到很多Apple的接口在它们的实例变量声明之前使用@private
。是否有一个很好的设计理由,这是我应该做的事情吗?
答案 0 :(得分:4)
私有实例变量用于将接口与实现分开。在Objective-C中,由于类声明必须显示所有实例变量,因此需要有一种方法来阻止子类访问属于内部实现的子类。否则,其他程序员可以编写依赖于那些内部变量的代码,这将使类设计者无法在不破坏现有代码的情况下对类内部进行更改。
从另一个角度来看,不标记为私有的实例变量是与子类程序员签订合同的一部分,而标记为私有的实例变量则不是。
这意味着实例变量通常应标记为私有,以便只能通过其访问器方法访问它们(如果有的话)。否则,有人可以轻松编写您的类的子类,只需创建一个访问器来使任何实例变量公开。
答案 1 :(得分:1)
如果您不希望子类能够访问变量,请将它们标记为@private。
答案 2 :(得分:0)
另一种方法是在@implementation部分声明实例变量。这些变量是隐含的私有。来源:Kochan: Objective-C编程,第四版。页。 199.因此,类声明必须显示所有实例变量,如e.James所述。
在@interface中声明实例变量的唯一原因是允许它们由派生类(子类)继承。