• static关键字的作用是什么?


    static的作用:常用来修饰变量。

    全局变量被static修饰后,就称之为静态全局变量;局部变量被static修饰后,就称之为静态局部变量。统称为静态变量。

    如果需要进一步解释下面的现象,可以了解iOS的内存管理方面的知识,比如局部变量是放置在栈区,而全局变量和静态变量是放置在静态区的。

    一、static修饰局部变量

    - (void)test {
    
        NSInteger i = 0;
        i++;
    
        static NSInteger m = 0;
        m++;
    
        NSLog(@"i = %ld, m = %ld", (long)i, (long)m);  
    
        NSString *normalString;
    
        static NSString *staticString;
    
        NSLog(@"normal = %p, static = %p", &normalString, &staticString); 
    
    }

    将上述方法在调用三次的打印结果是:

    i = 1, m = 1
    
    normal = 0x8e73d21, static = 0x928b78a89
    
    i = 1, m = 2
    
    normal = 0x8e73b09, static = 0x928b78a89
    
    i = 1, m = 3
    
    normal = 0x8e73c18, static = 0x928b78a89

    总结:

    当static关键字修饰局部变量时,只会对该变量初始化一次。

    当static关键字修饰局部变量时,该变量在程序中只有一份内存。

    当static关键字修饰局部变量时,该变量的作用域不会改变。

    当static关键字修饰局部变量时,该变量的生命周期被延长,直到程序结束才销毁。

    二、static修饰全局变量

    #import "ClassA.h"
    
    // 声明一个全局变量
    NSInteger num;
    
    @implementation ClassA
    
    @end

    在工程ClassA.m文件中证明一个全局变量,如果同时在其他.m文件中也声明一个全局变量NSIteger num,编译的时候就会报错。

    在其他文件中如果想访问全局变量num,可以import "ClassA.h"然后就能访问,或者不import,使用extern 关键字也能获得全局变量,比如:

    - (void)viewDidLoad {
        
        extern NSInteger num;
        NSLog(@"num = %ld", (long)num);
    }

    如果不想被整个工程文件所访问到,但是能在所声明的文件中自由访问,就需要使用static关键字来声明,如下:

    #import "ClassA.h"
    
    // 声明一个静态文件的全局变量
    static NSInteger num;
    
    @implementation ClassA
    
    @end

    总结:当用static关键字修饰全局变量时,该变量的作用域仅限于当前文件,工程中的其他文件不可以访问到该全局变量。

  • 相关阅读:
    JS实现——用3L和5L量出4L的水
    岭回归与Lasso回归
    简单多元线性回归(梯度下降算法与矩阵法)
    【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法
    tensorflow sigmoid_cross_entropy_with_logits 函数解释
    tensorflow 线性回归解决 iris 2分类
    神经网络激活函数
    神经网络防止过拟合的方法
    网络流量分析——NPMD关注IT运维、识别宕机和运行不佳进行性能优化。智能化分析是关键-主动发现业务运行异常。科来做APT相关的安全分析
    cnn汉字识别 tensorflow demo
  • 原文地址:https://www.cnblogs.com/cchHers/p/10010266.html
Copyright © 2020-2023  润新知