OC開發例項變數的訪問控制詳解

陳振發表於2017-12-13

設定訪問例項變數的方式

在物件內部,物件的任何例項方法都可以訪問該物件的例項變數。 通過外部類例項直接訪問物件的例項變數屬於變數功能範疇。

OC擁有多條編譯器指令,專門用於設定例項變數的作用範圍(即訪問控制)。

在.h中宣告的例項變數

預設的作用範圍是@protect。在本類及子類中可以通過->呼叫或者直接使用例項變數名呼叫。在其他類生成本類的例項物件無法使用該例項變數。 若宣告作用範圍: @private 只能在本類中呼叫,子類無法呼叫。 @protect:略 @public:子類,本類,其他類中生存該類例項後均能呼叫 @package:同@public

若在.m檔案和擴充套件檔案中宣告例項變數,無論宣告的作用範圍是@public還是@package,統統變為@private的作用範圍

在.h中宣告的屬性

setter和getter訪問等同於例項變數@public作用範圍 但其實屬性被編譯器自動補全時,它會建立一個作用範圍為@private的例項變數,無法在子類中直接用例項變數名訪問。而要用setter和getter方法。若想在子類中直接使用父類的屬性的例項變數名,必須重構父類介面。在.h檔案中新增@protect宣告的例項變數名即可,記得在屬性名前加下劃線。

在.m的類擴充套件中宣告的屬性

setter和getter訪問等同於例項變數@private作用範圍

如果希望宣告在類擴充套件中的屬效能在類外被訪問,常用的手段是在.h中將屬性宣告為(readonly),然後在.m檔案中重新宣告為(readwrite)。

相關文章