美文网首页
iOS全局静态和局部静态变量杂记

iOS全局静态和局部静态变量杂记

作者: _人非草木_ | 来源:发表于2019-01-14 12:32 被阅读0次

最近在检视项目中的代码时看到有人像这样使用静态局部变量(非原始代码,举例说明):

- (void)function {
    static NSString *str = "hello";
    ......  // 函数中只有对str的读取使用,无修改
}

我询问代码的开发人员为何需要定义这样一个局部静态变量,对方的回答是:此函数需要比较频繁调用,定义局部静态变量之后就不需要每次调用此函数的时候都定义和释放变量,可以提高执行效率。
咋听此言,好像是有些道理的。但是仔细一推敲,这种说法是存在问题的,主要有以下几点原因:

  • 局部静态变量的应用场景是函数每次调用的时候可以继续使用前一次调用时对此变量的赋值。在这个函数中,变量str初始化之后并没有再赋值,所以不符合局部静态变量的使用场景。
  • 静态变量存储在全局数据区,函数第一次被调用的时候就会初始化,直到程序退出时,其使用的内存一直不能释放。
  • 使用静态变量的函数都不可重入,是线程不安全的。
  • 再则,函数内部的局部变量定义、初始化到释放,效率并不会比使用静态变量低多少。

所以,除非必要,不要轻易使用静态变量,否则其带来的收益可能并不会如预期那么好。

相关文章

  • 堆栈 存储空间

    参考文献 iOS--------对堆、栈 存储空间的理解 局部变量、 全局变量、 堆、 堆栈、 静态和全局 iOS...

  • C++面试考点总结

    static作用是什么?在C和C++中有何区别? static可以修饰局部变量(静态局部变量)、全局变量(静态全局...

  • iOS全局静态和局部静态变量杂记

    最近在检视项目中的代码时看到有人像这样使用静态局部变量(非原始代码,举例说明): 我询问代码的开发人员为何需要定义...

  • Block捕获变量

    block捕获的变量 局部变量 静态局部变量 全局变量 静态全局变量 函数执行部分 总结 局部变量基本数据类型:捕...

  • 2.Blocks

    带有自动变量值的匿名函数 五种变量:自动变量(局部变量)、函数参数、局部静态变量、全局静态变量、全局变量 其中能够...

  • [C/C++]C语言中字符串常量存储在哪里

    常量存储总结 局部变量、静态局部变量、全局变量、全局静态变量、字符串常量以及动态申请的内存区 1、局部变量存储在栈...

  • C语言内存分配(重)

    内存分配的类型: 静态内存分配: 全局变量、静态全局变量、静态局部变量; 静态内存分配是在程序编译时分配的内存空间...

  • 编程中的局部变量,全局变量,静态变量

    关于局部变量、全局变量与静态全局变量和静态局部变量的比较与分析和拓展: 首先要明白的是局部变量与其它三个有本质区别...

  • static 与extern

    static: 一、在C或OC中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。 1、定义全局...

  • iOS面试题:Block变量的截获

    block如果要访问block以外定义的变量,对基本数据类型的局部变量、静态变量、全局变量、全局静态变量和对象变量...

网友评论

      本文标题:iOS全局静态和局部静态变量杂记

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