日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

7、在对象内部尽量直接访问实例变量

發布時間:2023/11/27 生活经验 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7、在对象内部尽量直接访问实例变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文概要:

1、首先給出結論是:除了幾種特殊情況外,在讀取實例變量的時候采用直接訪問的形式,而在設置實例變量的時候通過屬性來做。

2、講解了使用getter、setter的好處。

3、列舉了幾種上面提到的特殊情況:有時不能使用setter、有時必須使用setter、有時必須使用getter。

注意:在對象之外訪問實例變量時總是應該通過屬性來做。


?一、除了幾種特殊情況外,在讀取實例變量的時候采用直接訪問的形式,而在設置實例變量的時候通過屬性來做。

讀取時-直接訪問: _oldName

設置時-屬性訪問:self.newName

也就是:self.newName = _oldName;

二、講解了使用getter、setter的好處

  • 由于不經過OC的方法派發步驟,所以直接訪問實例變量的速度當然比較快。在這種情況下,編譯器所產生的代碼會直接訪問保存對象實例變量的那塊內存。
  • 直接訪問實例變量時,不會調用其setter方法,這就繞過了為相關屬性所定義的“內存管理語義”。比方說,如果在ARC下直接訪問一個聲明為copy的屬性,那么并不會拷貝該屬性,只會保留新值并釋放舊值。
  • 如果直接訪問實例變量,那么就不會觸發KVO通知。
  • 通過屬性來訪問有助于排查與之相關的錯誤,因為可以給getter和setter方法中增加斷點,監控該屬性的調用者及其訪問時機。

因此就引出了本文最開始講到的折中方案:

在寫入實例變量時,通過其setter方法來做,而在讀取實例變量時,則直接訪問。此方法既能提高讀寫操作的速度,又能控制對屬性的寫入操作。之所以要通過setter方法來寫入實例變量,其首要原因在于,這樣做能夠確保相關屬性的“內存管理語義”得以貫徹。

三、有時不能使用setter、有時必須使用setter、有時必須使用getter

1、有時不能使用setter的情景:

在初始化方法中總是應該直接訪問實例變量。

2、有時必須使用setter的情景:

如果待初始化的實例變量聲明在超類中,而我們又無法在子類中直接訪問此實例變量的話,那么就需要調用setter方法了。

3、有時必須使用getter的情景:

如果使用的是懶加載的方式來初始化實例變量的,必須通過getter方法來訪問屬性,否則,實例變量就永遠不會初始化。

轉載于:https://www.cnblogs.com/cchHers/p/8918844.html

總結

以上是生活随笔為你收集整理的7、在对象内部尽量直接访问实例变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。