关于oop:Objective-C中的属性是“静态”吗?

Are Properties in Objective-C “Static”?

我正在建立对面向对象编程中范围的理解,特别是Objective-C。我了解静态变量是在定义它们的类*的多个方法中使用时不会失去其值的变量。属性的行为方式是否相同?我知道对于类的子类中的每个实例,属性返回到它们的初始值。但是,它们在整个类中保留值(通过各种方法预先设置或修改),对吗?

*静态变量是否只在定义它们的类中的多个方法中使用时保留它们的值,还是在定义它们的类的所有实例中保留它们的值?如果是这样,那么我就可以理解为什么属性不会被视为具有静态行为。但如果不是,那么属性可以被认为是静态的,对吗?

另外,静态变量和全局变量有什么不同吗?


默认情况下,Objective-C中的实例属性由实例变量支持,因此它们的行为与静态变量不同。您可以在实例上设置一个属性,该值将保持不变,直到您将其设置为不同的值为止。

然而,属性只是方法调用之上的一种特殊语法。在一个方法中可以做的事情没有限制,所以理论上可以通过一个静态变量"返回"一个实例属性,编译器可以接受它。然而,这样的安排是不可读的,所以我强烈建议不要使用它。