美文网首页
浅谈iOS中的全局变量和static全局变量

浅谈iOS中的全局变量和static全局变量

作者: Caolongs | 来源:发表于2018-10-17 15:29 被阅读182次

场景:创建一个工具类,定义了一个静态全局变量,如何释放的问题?

在C语言里面,静态全局变量是存储在全局内存区(或是静态存储区),而且内存的分配是在程序运行前分配了,释放是在程序运行结束由系统自动释放,并不需要我们调用析构方法。那么OC开发中得全局静态变量也是一致的。 所以我们没有必要去管理我们的全局静态变量,在delloc方法里面也不需要去释放内存,因为系统会自动帮助我们释放静态变量。

内存划分:

  • 栈区:内存管理由系统控制,存储的为非静态的局部变量,例如:函数参数,在函数中生命的对象的指针等。当系统的栈区大小不够分配时, 系统会提示栈溢出。
  • 堆区:内存管理由程序控制,存储的为malloc , new ,alloc出来的对象。
    如果程序没有控制释放,那么在程序结束时,由系统释放。但在程序运行过程中,会出现内存泄露、内存溢出问题。分配方式类似于链表
  • 全局存储区(静态存储区):全局变量、静态变量会存储在此区域。事实上全局变量也是静态的,因此,也叫全局静态存储区。
    存储方式: 初始化的全局变量跟静态变量放在一片区域,未初始化的全局变量与静态变量放在相邻的另一片区域。
    程序结束后由系统释放。
  • 文字常量区:在程序中使用的常量存储在此区域。程序结束后,由系统释放。在程序中使用的常量,都会到文字常量区获取。
  • 程序代码区:存放函数体的二进制代码。
    运行程序就是执行代码,代码要执行就要加载进内存。

全局变量与全局静态变量的区别:

  • (a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。
  • (b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。
  • (c)具有外部链接的静态;可以在所有源文件里调用;除了本文件,其他文件可以通过extern的方式引用。

静态全局变量的作用:

  • (a)不必担心其它源文件使用相同变量名,彼此相互独立。
  • (b)在某源文件中定义的静态全局变量不能被其他源文件使用或修改。
  • (c) 只能在本文件中使用!具有内部链接的静态;不允许在其他文件里调用。

相关文章

  • extern static const inline

    static static 可以用来修饰静态变量,在iOS中,如果使用static修饰全局变量,则全局变量只能在当...

  • 浅谈iOS中的全局变量和static全局变量

    场景:创建一个工具类,定义了一个静态全局变量,如何释放的问题? 在C语言里面,静态全局变量是存储在全局内存区(或是...

  • ios开发笔记- (初级)

    ios全局变量:ios全局变量不能用的太多,而且一般都需要static保护。 为何不能用太多,因为全局变量作用域在...

  • ios开发笔记-(初级)

    ios全局变量:iOS全局变量不能用的太多,而且一般都需要用static保护。 为何不能用太多,因为全局变量作用...

  • c 静态全局变量

    static 与 全局变量当一个进程的全局变量被声明为static之后,它的中文名叫静态全局变量。静态全局变量和其...

  • Objective-C中static、const和extern关

    一 static 1,修饰全局变量 在全局变量前加static,全局变量就被定义成为一个静态全局变量(全局变量和静...

  • 1、static const 全局变量 单利为什么用stati

    1)static,extern修饰全局变量 static修饰的全局变量只能在当前文件中使用 全局变量和静态全局变量...

  • 关于static关键字的个人总结

    1,static全局变量和普通全局变量的区别:static全局变量只初始化一次,防止在其他文件单元引用 2,sta...

  • static、extern、const

    static 修改全局变量 1.static 修饰的全局变量只能在本文件中访问,别的文件中访问不到,对声明他的文件...

  • 你真的理解static吗?

    static修饰的全局变量与普通的全局变量的区别static修饰的局部变量和普通局部变量的区别static修饰的函...

网友评论

      本文标题:浅谈iOS中的全局变量和static全局变量

      本文链接:https://www.haomeiwen.com/subject/aolrzftx.html