Objective-C中“@public”是什么意思?

时间:2010-05-06 13:40:35

标签: iphone objective-c

阅读question on @private后,我明白了它是如何运作的。但是,由于所有变量都默认为@protected,并且在没有定义访问器的情况下无法真正访问变量,@public究竟做了什么?你什么时候用它?

4 个答案:

答案 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,因为任何类方法都可以直接访问它们。