Objective-C文法之static關鍵字的那些事兒(六)

來源:互聯網
上載者:User
Objective-C文法之static關鍵字的那些事兒



雨松MOMO原創文章如轉載,請註明:轉載至我的獨立網域名稱部落格雨松MOMO程式研究院 ,原文地址:http://www.xuanyusong.com/archives/408




        學習過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 因為標識了+號,所以這個方法無需使用這個類的對象調用。直接使用類名方可調用這個方法。

#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 關鍵字是一個不錯地選擇哦,哇哢哢~ 
前幾天上不了網 悲劇啊~~ 今天去按摩店 針灸 拔火罐 按摩 刮痧  太爽了,MOMO向廣大盆友們問好,有什麼都沒有有一個好身體重要,多去健身 保健 鍛煉身體 搞IT的盆友們  你們懂得 嘿嘿。。 



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.