Objective-c 中的變數

来源:http://www.cnblogs.com/xiaozhai-1234/archive/2016/03/04/5240487.html
-Advertisement-
Play Games

自己的學習筆記。


 

  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 @end
17 
18 @implementation Test
19 
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 @end
43 
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 Test
10 
11 static int Y = 10;
12 
13 - (int)staticIntY{
14     Y+=1;
15     return Y;
16 }
17 
18 @end
19 
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 Test
11 
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 @end
24 
25 int main(int argc , const char *argv[]){
26     @autoreleasepool {
27         Test *test = [Test new];
28         [test print];
29     }
30     return 0;
31 }

 

  

 

 

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 轉載博客:http://blog.csdn.net/i_lovefish/article/details/17719081 以下為異常捕捉處理代碼: import java.io.BufferedReader; import java.io.File; import java.io.FileInpu
  • 分類:C#、Android、VS2015; 創建日期:2016-03-04 一、簡介 目前,基於位置的服務發展迅速,已涉及到商務、醫療、定位、追蹤、敏感區域警告、工作和生活等各個方面。定位服務融合了GPS定位、移動通信、導航等多種技術,從而獲取用戶終端設備的位置信息,為移動用戶提供了與空間位置相關的...
  • Android Studio 優秀插件系列: Android Studio 優秀插件(一):GsonFormat Android Studio 優秀插件(二): Parcelable Code Generator -------------------------------------------
  • Notification是Android中很理想的一種顯示提示信息的方法,它可以將應用程式的信息傳遞到我們的Android桌面狀態欄,採用這種消息傳遞方式不會影響到用戶對手機的正常使用。而且Notification不僅僅可以傳遞文字信息,還可以傳遞圖片信息,甚至可以將我們的控制項追加到上面,只要用戶不
  • 自己的學習筆記。
  • 轉載自並做少量添加:http://www.cnblogs.com/playing/archive/2011/04/07/2008620.html Layout對於迅速的搭建界面和提高界面在不同解析度的屏幕上的適應性具有很大的作用。這裡簡要介紹Android的Layout和研究一下它的實現。 Andr
  • 原文出處: codingZero 歡迎分享原創到伯樂頭條 導語 不會使用block的iOS程式員,不是一個合格的程式員學會了block,你再也不想用繁瑣的代理block沒有你想象中的那麼難,不要害怕,不要畏懼,勇敢嘗試筆者入行iOS時已經是ARC的天下,所以這裡只說ARC環境下的使用 什麼是bloc
  • Android Studio 優秀插件系列: Android Studio 優秀插件(一):GsonFormat Android Studio 優秀插件(二): Parcelable Code Generator -------------------------------------------
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...