在自己寫 datePickeText 的時候
_datePickerText.inputView = self.datePicker;
_datePickerText.inputAccessoryView = self.toolbar;
在源碼中實現了對 datePicker 和 toolbar 的懶加載創建,但是在項目中加入的時候發現不能顯示出來,找問題才發現代碼對比的時候這里我寫的是_datePicker和_toolbar,替換回來之后能出現創建了.
在網上找了下這兩個的區別
通過self.xxx 訪問的方法的引用,包含了set和get方法。而通過ios 屬性下劃線是獲取自己的實例變量,不包含set和get的方法。
self.x xx是對屬性的訪問;而ios 屬性_xxx是對局部變量的訪問,所有被聲明為屬性的成員。再ios5之前需要使用編譯指令@synthesize 來告訴編譯器幫助生成屬性的getter和setter方法,之后這個指令可以不用認為的指定了,默認情況下編譯器會幫助生成。編譯器在生成getter,setter方法時是有優先級的,它首先查找當前的類中用戶是否定義屬性的getter,setter方法,如果有,則編譯器會跳過,不會再生成,使用用戶定義的方法。也就是說在使用self.xxx時是調用一個getter方法。會使引用計數加一,而ios 屬性_xxx不會使用引用技術加一的。
所有使用self.xxx是更好的選擇,因為這樣可以兼容懶加載,同時也避免了使用下滑線的時候忽略了self這個指針,后者容易在BLock中造成循環引用。同時,使用ios 屬性 _是獲取不到父類的屬性,因為它只是對局部變量的訪問。
因此,self方法實際上是用了get和set方法間接調用,ios 屬性下劃線方法是直接對變量操作。