Objective C 屬性訪問or直接訪問?

2021-07-04 14:20:41 字數 503 閱讀 9910

當定義了乙個屬性的時候,例如

@property (nonatomic, strong) uiimageview* imageview;

有兩種訪問方法self.imageview、_imageview,屬性訪問和直接訪問有幾個區別:

1直接訪問不用經過「方法派發」,速度上有一定的優勢

2直接訪問,繞過了「記憶體管理語義」,比如乙個屬性宣告為copy的,直接訪問只會釋放舊值並保留新值,不會copy。

3不會出發kvo,這個可能會導致一定的問題

4屬性訪問有助於排查bug,可以getter和setter設定斷點

所以有一種現行的折中方案:寫的時候,使用屬性訪問;讀的時候,直接訪問。之所以寫的時候選用屬性訪問,是要確保「記憶體管理語義」得到實施。有兩個需要注意的地方,一是在初始化方法中如何設定屬性值,應該是直接訪問,因為子類會override。二是lazy initialization的時候,應該是屬性訪問,否則實力變數永遠不會正確地初始化。

Objective C 使用點運算子訪問屬性

objective c語言允許你使用非常簡便的語法訪問屬性。要獲得 myfraction 中儲存的 numerator 的值,可使用以下語句 myfraction numerator 這會向 myfraction 物件傳送 numerator 訊息,從而返回所需的值。從 objective c 2....

Objective c 訪問控制

在objective c中定義類時,也可以使用類似於c 中public private來修飾成員變數,如下 intte ce test nsobject protected 用此指令修飾的例項變數可以被該類和任何子類定的方法直接訪問,這是預設情況。private 用此指令修飾的例項變數可以被定義在該...

Objective c 訪問控制

在objective c中定義類時,也可以使用類似於c 中public private來修飾成員變數,如下 cpp view plain copy intte ce test nsobject protected 用此指令修飾的例項變數可以被該類和任何子類定的方法直接訪問,這是預設情況。privat...