Objective-c:变量范围

标签 objective-c c variables static scope

很长一段时间以来,我一直使用下面的 1 和 3,最近使用 4 来定义我的变量。

但是我注意到还有其他有效的定义是我对 Objective-C 2 的新定义,通过将方法和它们的内部变量放在一起可以使代码看起来更好。

有人可以验证评论中的断言吗?

static id var1; // 1. Shared among all classes and their instances defined in this file

id var2; // 2. Same as 1?

@implementation MyClass
{
    id var3; // 3. Different variable for each instance
}

- (void)method
{
    static id var4; // 4.1. Not accessible from other methods
                    // 4.2. Different for each instance?
}

id var5; // 5. Same as 3? Same as 1/2?

static id var6; // 6.1. Same as 1?
                // 6.2. Not visible to other classes in this file?

@end

几个问题,例如 this一个有点相似,但 Objective-C 可能有一些差异。

最佳答案

静态标识符 var1;
=> 仅在当前翻译单元可见

id 变量2;
=> 全局可见(又名外部)

id 变量 3;
=> 实例变量。创建实例时创建 ([Class alloc])

静态标识符 var4;
=> 功能局部。在进程启动时创建。与 var1 相同的生命周期,但仅在函数内部可见。

id 变量5;
=> 与 var2 相同

静态标识符 var6;
=> 与 var1 相同

Objective-C 是忠实的 C 变体(恕我直言:)。

编辑了关于 var4 的不明确提及。

关于Objective-c:变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23926093/

相关文章:

ios - 如何从保存在文档目录中的 plist 中读取数据并在新 View 中将其显示为 pdf?

ios - 为什么我的弯曲文本没有自行居中?

c - 邻接表 : Path counter nonfunctional

c - 我将如何在 C 中重新分配二维数组?

css 中的 PHP 变量不更新/刷新

ios - FSCalendar - 我想在 longPressGesture 上选择日期

objective-c - ARC 是否可以在不泄漏的情况下处理这种情况?如果是这样,如何?

c - 在 C 中使用 getopt_long 将参数传递给函数

python - 为什么列表和字符串上的方法在 python 中的工作方式不同

php - 正则表达式 php 中的变量