轉:http://www.apkbus.com/android-593-1.htmlhtml
學習過Java 或者 C 語言的朋友應該很清楚static關鍵字吧?在某個類中聲明一個static 靜態變量, 其餘類中想使用它或者修改它不用new 這個對象 ,直接使用它的類名方可直接拿到這個靜態變量的對象,遍能夠在其餘類中任意修改這個變量的數值。
在Objective-C 的語法中聲明後的static靜態變量在其餘類中是不能經過類名直接訪問的,它的做用域只能是在聲明的這個.m文件中 。不過能夠調用這個類的方法間接的修改這個靜態變量的值。MOMO經過一個例子詳細的解析一下static關鍵字的使用。java
類的建立方法就很少說了,以前的文章有寫過。android
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,它只在程序開機初始化一次。3d
+(void)addCount 由於標識了+號,因此這個方法無需使用這個類的對象調用。直接使用類名方可調用這個方法。htm
#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 關鍵字是一個不錯地選擇哦,哇咔咔~