zoukankan      html  css  js  c++  java
  • oc中的static

    关于static从以下几个例子中来说明

    1.局部变量中的static

    //局部变量
    //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.全局变量中的static

    //全局变量
    /**
     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修饰,所以除了第一个类自己除外,都访问不到
  • 相关阅读:
    springboot之手动控制事务
    Java的几种常见排序算法
    Java之协程(quasar)
    中文字符和中文标点符号的正则表达式
    【转】SignalR与ActiveMQ结合构建实时通信
    【转】根据Quartz-Cron表达式获取最近几次执行时间
    【转】IIS请求筛选模块被配置为拒绝超过请求内容长度的请求
    【转】C# 中Linq查询所有上级节点或所有下级节点
    【转】FluentAPI详细用法
    【转】SQL数据库日志文件收缩
  • 原文地址:https://www.cnblogs.com/hkyangvip/p/5133466.html
Copyright © 2011-2022 走看看