最近在检视项目中的代码时看到有人像这样使用静态局部变量(非原始代码,举例说明):
- (void)function {
static NSString *str = "hello";
...... // 函数中只有对str的读取使用,无修改
}
我询问代码的开发人员为何需要定义这样一个局部静态变量,对方的回答是:此函数需要比较频繁调用,定义局部静态变量之后就不需要每次调用此函数的时候都定义和释放变量,可以提高执行效率。
咋听此言,好像是有些道理的。但是仔细一推敲,这种说法是存在问题的,主要有以下几点原因:
- 局部静态变量的应用场景是函数每次调用的时候可以继续使用前一次调用时对此变量的赋值。在这个函数中,变量str初始化之后并没有再赋值,所以不符合局部静态变量的使用场景。
- 静态变量存储在全局数据区,函数第一次被调用的时候就会初始化,直到程序退出时,其使用的内存一直不能释放。
- 使用静态变量的函数都不可重入,是线程不安全的。
- 再则,函数内部的局部变量定义、初始化到释放,效率并不会比使用静态变量低多少。
所以,除非必要,不要轻易使用静态变量,否则其带来的收益可能并不会如预期那么好。
网友评论