在括号外定义的ivars和(全局?)变量之间的区别

Difference between ivars and (global?) variables defined outside the brackets

有什么区别

@implementation aClass {
   aType *aVariable
}

- (void)aMethod: {
}

@implementation bClass

bType *bVariable

- (void)bMethod: {
}

bVariable 是全球性的吗?

Is bVariable global?

是的。

Objective-C 是 C 的扩展,这是标准的 C 全局变量声明。

您可能还应该查看 staticextern 与 C 中全局变量相关的含义。

HTH

附录

So back to the first question, the difference is that I can't define bVariable again in my entire project, while the term aVariable can be reused?

简答:不,至少不是你表达问题的方式。

长答案:你有两个声明,每个声明一个变量并关联一个名称(或 identifier)- aVariablebVariable - 使用该变量。除了作为声明一部分的 type,变量还有 lifetime - 变量存在的时间 - 和 scope - 程序中可以访问变量的部分。作用域可以嵌套,内部作用域可以包含使用与外部作用域相同的 name 的声明,这导致 hiding - 变量无法通过其 name.

直接访问外部作用域中的

一个 global 变量是一个 lifetime 是整个程序执行的变量,但是 scope 其中一个全局变量可以(直接)访问需要 而不是 是整个程序 (c.f。 (Objective 中的 static 限定符-)C),并且different具有非重叠范围的全局变量can具有相同的name

一个实例变量的生命周期与其所属class相同instance,其 scope 是 class.

的成员

还有本地变量,其生命周期和范围是声明它们的包含方法、函数、块等。

以上只是一个简短的总结,您应该查看所有 斜体 术语的含义。