zoukankan      html  css  js  c++  java
  • 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关键字修饰全局变量时,该变量的作用域仅限于当前文件,工程中的其他文件不可以访问到该全局变量。

  • 相关阅读:
    python字典实现原理-哈希函数-解决哈希冲突方法
    ElasticSearch-倒排索引
    ElasticSearch-核心概念
    MarkdownPad2基础语法
    下载python3.6,进行编译安装,运行django程序
    linux-指令1
    注解和反射
    Htlm和Css
    JAVASE加强
    网络编程
  • 原文地址:https://www.cnblogs.com/cchHers/p/10010266.html
Copyright © 2011-2022 走看看