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

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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,802评论 1 32
  • 第七章 成为杰出人物的路线图 第一阶段:产生兴趣——玩耍的渴望,可以作为孩子最初去尝试这些或者那些事情的原始动机,...
    老米子007er阅读 4,351评论 2 0
  • 有时候,特别的想念奶奶。有时候,觉得奶奶还没有离开我们。有时候,总会在心里和奶奶说说话。有时候,奶奶会来我的梦里。...
    花or花开淡墨痕阅读 1,170评论 0 0
  • 文/书范乘风 我常仰面对天 指其而问之 谁是独坐红尘之外的人呢 谁能独坐水穷之处 看白云初升 花开花落 人们都是在...
    范乘风阅读 3,890评论 1 7
  • 最近学习了一波自定义View,顺便做了一个demo,是按照另一篇文章来实现的。我这里主要分析一下思路,最后会附上全...
    万户猴阅读 13,478评论 13 4