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

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

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

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

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

    内存划分:

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

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

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

    静态全局变量的作用:

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

    相关文章

      网友评论

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

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