*.h中申明變數
#import
@inte***ce
newplayercontroller :
uiviewcontroller
@property(nonatomic,retain)
nsstring
*test;
@end
在*.m中
#import
"newplayercontroller.h"
@implementation
newplayercontroller
@synthesize test=
_test;
- (void)viewdidload
@end
@synthesize name=_name; 目的就是生成的getter和setter中所引用的是_name 而不是name。name從此就不應該在**中出現,該出現的要麼是_name,要麼self.name.
self.name 就是[self getname]
_***訪問的是***的位址。
訪問的是***的getter。
這兩者並不是完全等價的,
是用objc_msgsend發訊息,_***或者self->***則是直接訪問記憶體位址,
一般建議在init裡面用_***,其他地方用
方式一:(為何要定義乙個_test?下劃線開頭代表什麼意思?在實現的時候怎麼又將_test付給了test?)
方式二:(方式2跟方式1到底有何區別?)
方式三:(這種最簡單了,但是這樣寫規範嗎?)
第一種是比較老式的寫法,不過 nsstring *_test; 這個就是多餘的了,這個是更老式的了,那時候要手寫 getter setter
因為有了 synthesize 自動屬性合成器以後,這步,xcode已經幫你做過了。
還幫你寫了預設的 getter setter 方法,有下劃線就是標識,這個是成元變數,以便於區分 getter setter 中的形參(區域性變數)。
在 m 檔案中是可以直接對 帶下劃線的 成員變數進行賦值等操作的,但規範還是建議 使用 self.test 這樣來操作,除非你正在 setter getter 方法中,那是不能用這個。
還有谷歌那個 objc **風格,, 哈哈成員變數 下劃線在後面, test_ ,又暈了吧?我估計這個風格是為了完全區分 純成員變數,和 屬性。就是說 後面帶下劃線的這貨,就純粹是類本身自己用,沒有 getter setter,不需要給別的類訪問。
最後,早在 xcode 4.6 起,還是更早來著,記不得了, 什麼 synthesize 根本不用寫的,xcode 已經幫你寫了 @synthesize test = _test。
所以現在最簡潔的思路就是,如果你這個變數,是要給其他類能夠訪問到的,那麼你就直接寫個 @property 就夠了。
宣告成員變數 nsstring *_test; 還有屬性合成器 @synthesize test = _test,不需要寫了,
如果你這個變數,完全不需要給類外部訪問,那麼你就 自己宣告個 成員變數 nsstring *test_; 其他別寫。該初始化的地方初始化該釋放的釋放
//----------------
發現被踩了下,純個人理解可能會有誤,如有誤望不吝請指出,多謝,
前面最後說的有些不嚴謹了~ 沒說 在 h 和 m 中的區別。
在 h 中,只有 成員變數的話雖然沒有 getter setter , 子類還是能訪問的。屬性的話就是相當於公開的。
在 m 中,都是私有了。
Python 單下劃線和雙下劃線解析
單下劃線 單下劃線開始的成員變數叫做保護變數,意思是只有類物件和子類物件自己能訪問到這些變數 雙下劃線 開始的是私有成員,意思是只有類物件自己能訪問,連子類物件也不能訪問到這個資料。如下列所示 以單下劃線開頭 foo 的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用 from impo...
python變數 單下劃線和雙下劃線的區別
參考 在python中,有以下幾種方式來定義變數 公有變數 前置單下劃線,私有化屬性或方法,一般來講,變數名 xx被看作是 私有 的 在模組或類外不可以使用。當變數是私有的時候,用 xx 來表示變數是很好的習慣。類物件和子類可以訪問,這並不能完全做到真正的私有,只是約定俗成的而已,這樣寫表示不希望這...
Python單下劃線和雙下劃線
python 用下劃線作為變數字首和字尾指定特殊變數。不能用 from moduleimport 匯入 系統定義名字 類中的私有變數名 核心風格 避免用下劃線作為變數名的開始。因為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下 劃線作為變數名的開始。一般來講,...