gpt4 book ai didi

objective-c - 为什么/什么时候应该使用静态声明变量?

转载 作者:行者123 更新时间:2023-12-04 03:11:06 37 4
gpt4 key购买 nike

我没有 C/C++ 背景。在过去使用其他语言之后,我才开始学习 Objective-C。

在哪些情况下我应该使用变量的静态声明而不是常规的 ivar 或属性?我这样做有什么好处?

谢谢

最佳答案

全局变量和函数

默认情况下,导出所有符号(全局变量和函数)(对其他源文件中的代码可见)。如果全局变量声明为 static,则不会导出它。这意味着它只能由当前源文件中的代码访问。

当您有一个想要限制访问的全局变量并且不想担心名称冲突时,这很有用。例如,如果您想维护一个计数器来跟踪创建了多少个类的实例,您可以创建一个 static int gInstanceCount。由于它是 static,您会知道 (1) 没有其他代码可以修改该变量,并且 (2) 如果某个其他文件使用具有相同名称的全局变量,则不会发生任何冲突。

头文件中的静态声明

请注意,当您将某些内容放入头文件时,就好像您将该代码复制并粘贴到包含它的所有其他文件中。这意味着如果您在头文件中将某些内容声明为静态,则包含它的每个文件都会获得该内容的自己的副本。

这意味着如果您在 Foo.h 中声明 static int foo 然后在 Bar.m 中编写 execute foo = 4 ,当您尝试在 Other.m 中访问该值时,您不一定会返回 4。

局部静态变量

您还可以将局部变量(在函数或方法体内)定义为static。通常,局部变量分配在“堆栈”上,这意味着它们在函数执行时创建,并在函数退出时释放。如果两个线程同时进入同一个函数(或者一个线程对函数进行递归调用),每个线程都会获得一 block 新的内存来使用,并且它所做的任何事情都不会影响任何其他线程。

但是,本地static 变量存储在“堆”中。该函数的所有执行共享相同的内存位置。此外,当函数结束时,该值将保留在原处。这就是为什么在 Objective-C 单例对象的 sharedInstance 方法中经常使用局部静态变量的原因。

在大多数情况下,局部 static 变量基本上就像一个全局变量,只能在声明它的函数内部看到。

关于objective-c - 为什么/什么时候应该使用静态声明变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17159405/

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