Spa*_*Dog 2 static objective-c
我没有C/C++的背景知识.我刚刚开始使用其他语言学习Objective-C.
在哪些情况下,我应该使用常规ivars或属性的变量的静态声明?我这样做有什么用?
谢谢
默认情况下,将导出所有符号(全局变量和函数)(使其他源文件中的代码可见).如果声明了全局变量static,则不会导出它.这意味着它只能访问当前源文件中的代码.
当您有一个要限制访问的全局变量,并且不想担心名称冲突时,这非常有用.例如,如果要维护计数器以跟踪已创建的类的实例数,则可以创建一个static int gInstanceCount.既然如此static,你会知道(1)没有其他代码可以修改变量,(2)如果某个其他文件使用同名的全局,则不会发生任何冲突.
请注意,当您在头文件中放入某些内容时,就好像您将该代码复制并粘贴到包含它的每个其他文件中.这意味着如果在头文件中声明某些东西是静态的,那么包含它的每个文件都会获得它自己的副本.
这意味着,如果你声明static int foo中Foo.h,然后编写执行foo = 4中Bar.m,当您尝试访问该值Other.m,你不一定会得到4回.
您还可以将局部变量(在函数或方法体内)定义为static.通常,局部变量在"堆栈"上分配,这意味着它们是在执行函数时创建的,并在函数退出时释放.如果两个线程同时进入同一个函数(或者一个线程将一个递归调用回函数),每个线程都会获得一大块内存来处理,而它所做的任何事情都不会影响任何其他线程.
但是,局部static变量存储在"堆"上.函数的所有执行都共享相同的内存位置.此外,当函数结束时,该值保持不变.这就是为什么sharedInstance在Objective-C单例对象的方法中经常使用局部静态变量的原因.
在大多数情况下,局部static变量基本上就像一个全局变量,只能在声明它的函数内部看到.
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |