gpt4 book ai didi

objective-c - Objective-C 中的静态变量——它们的作用是什么?

转载 作者:太空狗 更新时间:2023-10-30 03:09:03 33 4
gpt4 key购买 nike

我看过一些讨论什么是静态变量的帖子,我想我明白了 - 但我喜欢快速编写(或找到)一个同时使用常规变量和静态变量的程序,看看他们如何/何时以不同方式运作。一些快速的 n 脏代码,可能是两个 int 变量和几个 NSLog 跟踪语句,只是为了看看它们有何不同。

有人有任何提示/想法/代码可以说明静态变量与常规变量有何不同吗?

最佳答案

在 C 和 Objective-C 中,static 变量是为程序的整个生命周期分配的变量。这与 automatic 变量形成对比,后者的生命周期存在于单个函数调用期间;和动态分配的变量,如对象,当不再使用时可以从内存中释放。更简单地说,静态变量的值在所有函数/方法调用中都得到维护。当在函数外部声明时,静态变量对声明它的文件中的所有内容都是可见的;当在函数或方法内声明时,它仅在该函数或方法内可见,但该值在调用之间保留。

假设你有这个:

int f(void)
{
int i = 5;
i += 10;
return i;
}

每次调用 f() 都会返回值 15

现在假设你有这个:

int g(void)
{
static int i = 5;
i += 10;
return i;
}

第一次调用g(),返回值15。第二次,将返回 25,因为 i 保持其 15 的值,然后自增 10 .第三次调用 35 将被返回。等等。

在 Objective-C 类的上下文中,静态变量通常用于模拟类变量,因为 Objective-C 没有类变量(其他语言,如 Java,有)。例如,假设您想延迟初始化一个对象,并且只返回该对象。你可能会看到这个:

static MyObject *obj = nil;

@implementation MyObject

+ (id)sharedObject
{
if (obj == nil) obj = [[MyObject alloc] init];
return obj;
}

@end

obj 将在第一次调用 classObject 时被初始化; classObject 的后续调用将返回相同的对象。您可以通过记录对象的地址来检查这一点:

NSLog(@"obj is at %p", [MyObject sharedObject]);
NSLog(@"obj is at %p", [MyObject sharedObject]); // Will print the same address both times

此外,obj 将对 MyObject 中的所有方法可见。

此技术也用于在 Objective-C 中实现单例类。

关于objective-c - Objective-C 中的静态变量——它们的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4965048/

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