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關鍵字修飾全局變量時,該變量的作用域僅限於當前文件,工程中的其他文件不可以訪問到該全局變量。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM