首页 > 技术文章 > 探索static的用处

samyangldora 2015-07-06 00:36 原文

探讨的问题

  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修饰局部变量

      - 让局部变量只初始化一次

        - 局部变量在程序中只有一份内存

        - 并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁)

   - 修饰全局变量

       - 全局变量的作用域仅限于当前文件

 

推荐阅读