我通常會以相反的方式問這個問題,例如,每個ivar都必須是一個屬性嗎?(而且我喜歡bbum對這個問題的回答)。我幾乎只在代碼中使用屬性。但是,我經常與一個承包商合作,該承包商已經在iOS上開發了很長時間,并且是傳統的游戲程序員。他編寫的代碼幾乎不聲明任何屬性,而是依靠ivars。我認為他這樣做是因為1.)他習慣了,因為直到Objective C 2.0(Oct '07)和2.)時,屬性總是不存在的,以便不通過getter / setter來獲得最小的性能提升。盡管他編寫的代碼不會泄漏,但我仍然希望他使用屬性而不是ivars。我們討論了一下,由于我們沒有使用KVO,他或多或少地認為沒有理由使用屬性,并且他在處理內存問題方面經驗豐富。我的問題是更多...為什么您要使用ivar期間-經驗豐富與否。是否確實有很大的性能差異可以證明使用ivar是合理的?同樣,為了澄清起見,我根據需要覆蓋了setter和getter,并使用了與getter / setter內部的該屬性相關聯的ivar。但是,在getter / setter或init之外,我始終使用self.myProperty語法。編輯1我感謝所有的良好回應。我想解決的一個看起來不正確的問題是,使用ivar可以封裝,而使用屬性則不需要。只需在類延續中定義屬性即可。這將使財產對外界隱藏。您還可以在接口中將屬性聲明為readonly,然后在實現中將其重新定義為readwrite,例如:// readonly for outsiders@property (nonatomic, copy, readonly) NSString * name;并在課堂上繼續學習:// readwrite within this file@property (nonatomic, copy) NSString * name;要使其完全“私有”,只能在類繼續中聲明它。
- 3 回答
- 0 關注
- 407 瀏覽
添加回答
舉報
0/150
提交
取消