探讨的问题:
IOS开发中,新手在写tableView的identifier,如果有多个tableView有可能直接用ID都用了相同的名字但又没有用statice,这样就会导致下面的错误,而如果加了之后就不会。那么IOS中static这个关键字到底有哪些作用呢?
环境:
- 使用一个main一个person类,具体如下
#import <Foundation/Foundation.h>
#import "SAMPerson.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
extern int age;
NSLog(@"%d",age);
}
return 0;
}
#import "SAMPerson.h"
int age = 10;
@implementation SAMPerson
@end
步骤:
- 修饰局部变量时
- 可以看到没有static时,age每次打印的都是1,有static的时候打印会根据上一次的结束继续运算。
- 修饰全局变量的时候
- 下面这种情况下,我定义了一个age的全局变量,这种情况下是很危险的,因为任何用extern来外部引用我这个age变量,都可以调用它,甚至修改它。
- 而当你用static来修饰age的时候,你再调用就发现就会报错,如下图。
总结:
- static修饰局部变量
- 让局部变量只初始化一次
- 局部变量在程序中只有一份内存
- 并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁)
- 修饰全局变量
- 全局变量的作用域仅限于当前文件