屬性的讀取採用點語法,訪問對應的set和get方法。而直接訪問是直接訪問的對象實例的內存。這二者有什麼區別?在什麼狀況應該使用哪一種方法呢?spa
1、區別調試
直接訪問實例變量有以下幾種特質。對象
一、不通過Objective-C的方法派發,直接訪問實例變量的內存,速度快。內存
二、因爲沒調用set方法,因此繞過了屬性定義時聲明的「內存管理語義」,只會保留新值,釋放舊值。get
三、不會觸發「鍵值觀測」KVO機制。內存管理
四、沒法經過給set和get打斷點來進行調試。變量
2、使用場景語法
通用狀況:方法
在類的外部,使用屬性存取。co
在類的內部,若是是設置實例變量,採用屬性設置,若是是獲取實例變量,直接獲取。
特殊狀況:
一、在對象初始化方法中,儘可能採用直接訪問,但若是是超類的實例變量,就只能用屬性存取;
二、在類的內部,若是在get方法中,惰性初始化某實例變量,那隻能使用屬性存取。