oc中的static

关于static从如下几个例子中来讲明spa

1.局部变量中的staticcode

//局部变量
//1.只会被初始化一次,也就是只有一分内存。
//2.生命周期被改变,一直到程序结束才释放

// age没有被static修饰的时候
- (void)Aboutstatic
{
    int age = 21;
    age--;
    NSLog(@"age==%d",age);
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //在此打印三次结果,看看输出
    [self Aboutstatic];
    [self Aboutstatic];
    [self Aboutstatic];
    
}

//控制台输出结果能够看到,变量age每次都被初始化为21,因此三次打印结果都为20
2016-01-15 14:41:47.907 [1754:258152] age==20
2016-01-15 14:41:47.908 [1754:258152] age==20
2016-01-15 14:41:47.908 [1754:258152] age==20

//age经过static修饰以后
- (void)Aboutstatic
{
    static int age = 21;
    age--;
    NSLog(@"age==%d",age);
}
//看看控制台输出结果
2016-01-15 14:49:58.475 [1768:266933] age==20
2016-01-15 14:49:58.476 [1768:266933] age==19
2016-01-15 14:49:58.476 [1768:266933] age==18

//第二次输出结果明显与第一次不同,使用了static修饰以后,age的内存地址只有一份,只被初始化了一次,第一次初始化以后是21,21--以后第一次就输出了20,当第二次调用的时候,因为没有被从新初始化,天然就输出了19.

 2.全局变量中的staticblog

//全局变量
/**
 1.默认状况没有被static修饰的状况下
 ①做用域是整个项目,项目中任何地方都能经过extern关键字来引用
 ②仍是只会被初始化一次,内存地址一样只有一份
 */

1.第一个类中声明一个全局变量和一个方法
int age_ = 21;

- (void)logAge
{
    NSLog(@"age_==%d",age_);
}

2.在第二个类中使用extern来访问age_
    extern int age_;
    NSLog(@"%d",age_);
看到控制台打印输出
2016-01-15 15:26:50.224 [1810:289550] 21


/**
 2.被static修饰的状况下
 ①做用域只限于当前文件,项目中任何地方都不能经过extern关键字来引用
 ②改变了做用域,可是没有改变生命周期
 */
static int age_ = 21;
当继续使用extern引用的时候,就会报错
Undefined symbols for architecture x86_64:
  "_age_", referenced from:
      -[2eController viewDidLoad] in 2Controller.o
错误是说在引用age_的时候,找不到这个变量,是由于使用了static修饰,因此除了第一个类本身除外,都访问不到
相关文章
相关标签/搜索