首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

Objective-C 學習筆記:實例變數、屬性與記憶體管理

     編輯:關於C

Objective-C 核心概念整理:從實例變數到資料類型轉換

整理自《Effective Objective-C 2.0》等經典教材的核心觀念,涵蓋實例變數慣例、全域/靜態變數、列舉、typedef 及資料類型轉換規則。

Part 1:實例變數與屬性

  • 命名慣例:以底線 _ 開頭(如 _name),區別於屬性名稱
  • 封裝性:在 @implementation 中顯式宣告實例變數為 @private,子類別無法直接存取,需透過繼承的存取方法
  • 自動合成:現代編譯器自動產生存取方法,無需手寫 @synthesize,只需在 @interface 宣告 @property

Part 2:全域變數

  • 命名慣例:小寫 g 開頭(如 int gMoveNumber = 1;)
  • 外部變數:可被其他檔案的函數/方法存取修改
  • extern 關鍵字:extern int gMoveNumber; 為宣告非定義,不配置記憶體
  • 使用策略:多處使用時在檔案開頭單一 extern;少數處使用時在各函數內部宣告

Part 3:靜態變數

// 檔案層級 static:僅限本檔案可見(內部連結)
static int gGlobalVar = 0;

// 函數內部 static:保持狀態,僅初始化一次
void counter() {
    static int count = 0;
    printf("%d\n", ++count);
}

static 修飾全域變數限制連結範圍;修飾區域變數延長生命週期至程式結束。

Part 4:列舉類型

enum Direction {
    Up,      // 0
    Down,    // 1
    Left = 10, // 指定值
    Right    // 11 (自動遞增)
};
  • 提供整數與語義名稱的對應,提升可讀性
  • 修改值只需改定義處,呼叫端無需變動
  • 建議搭配 NS_ENUM/NS_OPTIONS 宏使用(現代 Objective-C)

Part 5:typedef 型別別名

typedef int Counter;
Counter i, j; // 等同 int i, j;

// 複雜類型簡化
typedef void (^CompletionBlock)(BOOL success, NSError *error);
CompletionBlock callback = ^(BOOL s, NSError *e) { ... };

提升程式碼自文件化程度,明確變數用途。

Part 6:資料類型轉換規則(整數提升與常用算術轉換)

運算元類型不同時,編譯器依優先序自動轉換:

  1. long double → 最高優先級
  2. double
  3. float
  4. 整數提升:bool、char、short、enum、位域 → int
  5. long long / long
  6. int → 最低優先級

實務陷阱範例

char c = 200; // 假設 char 為 signed (-128~127)
int i = c;    // 整數提升:c 先轉為 int (-56),再賦值給 i
// 結果 i == -56,而非 200!

unsigned char uc = 200;
int j = uc;   // 提升為 int (200),結果正確

教訓:涉及有號/無號、大小不同類型運算時,務必明確轉型或使用固定寬度類型。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved