Objective-C 語法之 static 關鍵字

學習過Java 或者 C 語言的朋友應該很清楚static關鍵字吧?在某個類中聲明一個static 靜態變量, 其他類中想使用它或者修改它不用new 這個對象 ,直接使用它的類名方可直接拿到這個靜態變量的對象,遍可以在其他類中任意修改這個變量的數值。
        
在Objective-C 的語法中聲明後的static靜態變量在其他類中是不能通過類名直接訪問的,它的作用域只能是在聲明的這個.m文件中 。不過可以調用這個類的方法間接的修改這個靜態變量的值。MOMO通過一個例子詳細的解析一下static關鍵字的使用。

類的創建方法就不多說了,之前的文章有寫過。

MyClass.h

警告:  static 寫在interface外面編譯是沒有錯誤的,但是編譯器會報警告,這麼說這樣的寫法是不被編輯器認可的。
錯誤:static 寫在interface裏面會直接報錯,顯然這樣的語法是不被認可的。

+(void) addCount;  各位盆友們注意一下這法方法前面的+號。 它的意思是標緻這個方法爲靜態方法,標誌+號後不用創建這個對象通過類名可以直接調用這個靜態方法。 而之前方法前用過的-號,標誌-號後的方法必須通過本類的對象或者在本來中纔可以使用。

[代碼]:

#import <Foundation/Foundation.h>

//警告

//static int sCount ;

@interface MyClass : NSObject

{

       //錯誤的寫法

       //static int sCount;

}

+(void) addCount;

@end
   

MyClass.m

static關鍵字聲明的變量必須放在implementation外面,或者方法中,如果不爲它賦值默認爲0,它只在程序開機初始化一次。

+(void)addCount 因爲標識了+號,所以這個方法無需使用這個類的對象調用。直接使用類名方可調用這個方法。

[代碼]java代碼:

#import "MyClass.h"

static int sCount  = 100;

@implementation MyClass

+(void)addCount

{

    sCount ++;

    NSLog(@"靜態整型變量的值爲:%d", sCount);

}

@end

main.m

無需alloc這個對象,直接使用MyClass類名方可直接調用addCount方法。

[代碼]:

#import <UIKit/UIKit.h>

#import "MyClass.h"

int main(int argc, char *argv[])

{

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    //添加我們的測試代碼

    [MyClass addCount];

    int retVal = UIApplicationMain(argc, argv, nil, nil);

    [pool release];

    return retVal;

}
   

運行這個程序,初始化賦值爲100 ,調用方法的時候++,所以打印出來的數值爲101。

MyClass.m

將static整型變量定義在方法中,並且爲其賦值100。

[代碼]:

#import "MyClass.h"

@implementation MyClass

+(void)addCount

{

    static int sCount  = 100;

    sCount ++;

    NSLog(@"靜態整型變量的值爲:%d", sCount);

}

@end

main.m

循環5次調用這個方法,看看結果是什麼樣字,結果肯定是101吧。。

[代碼]:

#import <UIKit/UIKit.h>

#import "MyClass.h"

int main(int argc, char *argv[])

{

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    //添加我們的測試代碼

    for (int i =0; i < 5; i++) {

        [MyClass addCount];

    }

    int retVal = UIApplicationMain(argc, argv, nil, nil);

    [pool release];

    return retVal;

}

   

程序員不要相信任何人說的任何有關程序的話,一定相信自己,相信自己眼睛看到的一切,哇咔咔~~

可見即使將static靜態變量寫在方法中,它的初始化也是在程序開機時,程序一旦啓動以後static是不能在創建的。所以程序在這裏調用了5次這個方法,sCount的值並沒有因爲重新創建static sCount而改變,而是將sCount的值一直存在內存中。

static關鍵字在任何語言中都是非常重要的,它有優點也有缺點,善用static 關鍵字是一個不錯地選擇哦,哇咔咔~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章