Objective-c 中的變數,Objective-c變數

來源:互聯網
上載者:User

Objective-c 中的變數,Objective-c變數

 

  OC中的語言變數,按範圍可分為兩種:局部變數和全域變數。

  局部變數:也稱為內部變數,局部變數是在方法內部聲明的。其範圍僅限於方法內,離開該方法再使用這個變數就是非法的。

  全域變數:也稱為外部變數,它是方法外部定義的變數。它不屬於哪一個方法,而屬於一個來源程式檔案,其範圍是整個來源程式。全域變數的說明符為:extern ,比如:extern int intX; 

  如果一個源檔案中的外部變數與局部變數同名,則在局部變數的作用範圍內,外部變數被“屏蔽”,而不起作用。通常盡量不使用 extern 變數。

  在類中的執行個體變數,是可以在各個方法內使用。在這些執行個體變數上,你可以設定存取控制。

  下面舉例來說明局部變數和執行個體變數的區別:

  

 1 #import <Foundation/Foundation.h> 2  3 @interface Test : NSObject{ 4     int _x;  // 執行個體變數 5     int _y; 6 } 7  8 - (void)setX:(int)x; 9 - (int)x;10 11 - (void)setY:(int)y;12 - (int)y;13 14 - (void)print;15 16 @end17 18 @implementation Test19 20 - (void)setX:(int)x{21     _x = x;22 }23 - (int)x{24     return _x;25 }26 27 28 - (void)setY:(int)y{29     _y = y;30 }31 - (int)y{32     return _y;33 }34 35 - (void)print{36     int i = 1;  // 局部變數37     NSLog(@"i = %i",i);38     NSLog(@"相加的結果:%i",_x + _y);39 }40 41 42 @end43 44 int main(int argc , const char * argv[]){45     @autoreleasepool {46         Test *test = [[Test alloc] init];47         [test setX:10];48         [test setY:10];49         NSLog(@"x = %i , y = %i",[test x],[test y]);50         [test print];51     }52     return 0;53 }

 

   理解 static 變數:

  被 static 修飾的變數稱為靜態變數。靜態變數有以下優點:可以節省記憶體,因為它是所有對象所公有的,因此,對多個對象來說,靜態變數只儲存一處,供所有對象共用。靜態變數的值對每個對象都一樣,但它的值是可以更新的。只要某一個對象對靜態變數的值更新一次,所有對象都能訪問更新後的值,這樣可以提高效率。下面通過代碼來示範它的用法:

  

 1 #import <Foundation/Foundation.h> 2  3 @interface Test : NSObject{ 4      5 } 6 - (int)staticIntY; 7 @end 8  9 @implementation Test10 11 static int Y = 10;12 13 - (int)staticIntY{14     Y+=1;15     return Y;16 }17 18 @end19 20 int main(int argc , const char *argv[]){21     @autoreleasepool {22         Test *test = [Test new];23         NSLog(@"Y = %i",[test staticIntY]);  // Y = 11;24         NSLog(@"Y = %i",[test staticIntY]);  // Y = 12;25         26     }27     return 0;28 }

 

  變數的儲存類別:

  前面已經使用了一些變數儲存類別的說明符,例如 extern 和 static,下面將介紹另外三個變數儲存類別的說明符:

  1. auto 用於聲明一個自動全域變數,是方法內部變數的聲明方式,一般省略它,比如:auto int x = int x;

   注意:自動變數沒有預設的初始值,除非我們顯示的給它賦值,否則它的值不是確定的。

  2. const 可聲明程式中的值為不可改變的值,它會告訴編譯器,這個變數在程式的運行期間都有恒定的值。是一個常數,例如:const double pi = 3.14;

  3. volatile 這個修飾符和 const 修飾符相反,它告訴編譯器,該變數的值會發生改變。例如:

  *char1 = 'a';

  *char1 = 'b';

  如果沒有使用 volatile ,那麼,當編譯器遇到這兩行代碼的時候,因為這是對一個地址進行兩次連續的賦值,所以編譯器就將第一個語句從程式中刪除掉。為了防止這種情況出現。應該把 char1 聲明為一個 volatile 變數;

  volatile char *char1;

 

  下面通過一個例子來示範一下這三個標識符的用法:

  

 1 #import <Foundation/Foundation.h> 2  3 @interface Test  : NSObject{ 4      5 } 6  7 - (void)print; 8 @end 9 10 @implementation Test11 12 const double d = 3.14;  // 表示d是不會改變的13 14 volatile char c = 'c';  // 表示c是隨時都可變的15 16 - (void)print{17     auto int i = 10;  // 局部變數18     NSLog(@"i = %i",i);19     NSLog(@"d = %f",d);20     NSLog(@"c = %c",c);21 }22 23 @end24 25 int main(int argc , const char *argv[]){26     @autoreleasepool {27         Test *test = [Test new];28         [test print];29     }30     return 0;31 }

 

  

 

 

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.