阅读question on @private后,我明白了它是如何运作的。但是,由于所有变量都默认为@protected,并且在没有定义访问器的情况下无法真正访问变量,@public究竟做了什么?你什么时候用它?
答案 0 :(得分:5)
@public意味着可以在任何地方访问ivar。
@private意味着ivar可以被类
的实例访问@protected意味着类和子类的实例可以访问ivar。
要访问类外的公共ivar,请使用标准C结构指针运算符 - > e.g。
foo->instanceVarible = xyzzy;
你什么时候使用它?就我而言:永远不会。我总是将实例变量定义为@private(IBOutlets除外),并使用访问器在类外部访问它们。
答案 1 :(得分:2)
你什么时候使用它?当你需要public
时。要从该类外部访问它(没有任何额外的访问者),即。 :)
答案 2 :(得分:0)
@public
是一个可见性修饰符。这意味着声明为@public
的实例变量可以由任何类的实例访问。公共成员可以通过子类或其他类访问。相反,私有成员不能由子类或其他类访问。
答案 3 :(得分:0)
这个问题与编码实践有关。
如果您编写非常严格的代码,则始终使用@private
作为实例变量,以确保只有类函数可以访问它们。在我看来,这只在非常具体的情况下才有必要,例如,类变量(对于类的多个实例,有一个变量)。
大多数情况下@protected
最适合普通实例变量,因为它允许子类直接访问它们。它更加自然,与扩展课程的想法一致。根据您实际访问它们的方式,Objective C实际上可能实际上使用该类的setter和getter函数。 @protected
对于高效代码和使代码更具可读性是可取的。
@public
保留用于快速或脏编程。可能只是更快地直接访问实例成员,或者您可能正在与另一个编程语言/库连接,并且您正在编写一些粘合剂。我试图避免它,因为这意味着代码维护更加困难。
显然你可以一直使用@public
- 回到C编程的美好时光。
您当然可以选择不为类变量定义任何访问器,因为它是类的内部,或者因为您声明为@public
,但是因为Objective C可以很容易地使用@property
对它们进行原型化@synthesize
并没有多大意义。内部类变量不需要setter / getter,因为任何类方法都可以直接访问它们。