在Objective-C中,.h和.m檔案之間的連接


當你首次在Xcode中打開一個Objective-C專案,.h和.m檔案可能會讓你感到困惑。理解這些簡單的連接以及背後的隱藏程式碼是很重要的。

這些檔案被用來分離類別的公開和私有部分。.h檔案充當你的類別的公開宣告的標頭檔案,功能就像一個API,而.m檔案則包含私有的實現。

當你需要從其他檔案中調用一個函數時,你只需匯入.h檔案來做參考。例如,

    #import <Foundation/Foundation.h>

在.h檔案中,你可以宣告類別的公開@property屬性,可以從外部訪問:

    @property (strong, nonatomic) NSString *something;

在此,@property是一個指向其類別為NSString的對象的指標。所有对象都居住在堆中,所以我们需要星號(*)。另外,“strong”的意思是”我將這個屬性設置為nil之前,保持此對象在記憶體中。” “Nonatomic”的意思是”這個屬性的訪問不是線程安全的;” 否則,編譯器將生成鎖定程式碼。

在.m檔案中,這個屬性的”取值方法”和”設值方法”會被自動地在背後生成,使得@property實例可訪問:

    @synthesize something = _something;
    - (NSString *) something
    {
      return _something;
    }
    - (void)setSomething:(NSString *)something
    {
      _something = something;
    }

請注意,默認情況下,支持變數的名稱與屬性的名稱相同,但在前面有一個下劃線。除非你想覆寫方法並做一些不同的事情,否則你不需要寫上述程式碼。

當你創建一個新方法,你需要將聲明放在.h檔案中:

    - (int)newMethod:(ArgType *)arg;

然後在你的.m檔案中寫實際的細節。

    - (int)newMethod:(ArgType *)arg
    {
      int num = 0;
      // 方法中的某些東西...
      return num;
    }

此外,對於私有宣告,你可以像這樣將它們包含在.m檔案中:

    @interface Something()
    // 私有宣告...
    @end

最後,當你第一次讀別人的程式碼時,你只需要查看.h檔案來獲取專案的概述。如果需要深入了解細節,那就看.m檔案。

了解上述的基本概念將使你開始理解其餘的程式碼。:D