屬性存取、直接訪問實例變量

屬性的讀取採用點語法,訪問對應的set和get方法。而直接訪問是直接訪問的對象實例的內存。這二者有什麼區別?在什麼狀況應該使用哪一種方法呢?spa

 

1、區別調試

直接訪問實例變量有以下幾種特質。對象

一、不通過Objective-C的方法派發,直接訪問實例變量的內存,速度快。內存

二、因爲沒調用set方法,因此繞過了屬性定義時聲明的「內存管理語義」,只會保留新值,釋放舊值。get

三、不會觸發「鍵值觀測」KVO機制。內存管理

四、沒法經過給set和get打斷點來進行調試。變量

 

2、使用場景語法

通用狀況:方法

在類的外部,使用屬性存取。co

在類的內部,若是是設置實例變量,採用屬性設置,若是是獲取實例變量,直接獲取。

特殊狀況:

一、在對象初始化方法中,儘可能採用直接訪問,但若是是超類的實例變量,就只能用屬性存取;

二、在類的內部,若是在get方法中,惰性初始化某實例變量,那隻能使用屬性存取。

相關文章
相關標籤/搜索