gpt4 book ai didi

objective-c - 静态变量和全局变量之间的区别

转载 作者:行者123 更新时间:2023-12-02 04:20:32 25 4
gpt4 key购买 nike

下面的代码有什么区别?

@implementation MyClass

static int myVar =0;
int _myVar =0;

我为 MyClass 的不同对象获取相同的值,并且这两个值对于 MyClass 的所有方法都是可见的...

最佳答案

静态变量和全局变量在生命周期和范围方面的行为有很大不同。首先,让我区分一下生命周期和范围。对象的生命周期决定了该对象是否仍在(进程的)内存中,而对象的范围是我是否可以通过该位置的名称知道该变量。对象可能是事件的,但不可见(不在作用域内),但并非该对象不活动但在作用域内(通过指针引用对象的动态分配对象除外)。

静态变量在定义它们的模块范围内是局部的,但生命周期贯穿于整个程序。假设函数内部的静态变量不能从函数外部调用(因为它不在作用域内),但它是事件的并且存在于内存中。下次进入该函数时(在同一程序内),将访问相同的内存块,现在保留变量旧值,并且这次不会像函数中的其他变量(自动变量)一样为此变量分配新内存。所以基本上这个变量在整个程序中持续存在。类似地,如果在全局空间中定义静态变量(例如在文件开头),则该变量将是只能在此文件中访问(文件范围)。

另一方面,全局变量必须在全局范围内定义,在整个程序中持续存在(生命),作用域也在整个程序中。这意味着可以从程序的任何函数、任何文件访问此类变量。

因此,如果您有一个全局变量并且您将文件作为库分发,并且您希望其他人不访问您的全局变量,您可以通过添加关键字 static 将其设为静态(当然,如果其他中不需要相同的变量)你的文件)。

关于objective-c - 静态变量和全局变量之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30817946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com