OC 成員變數下劃線 解析

2021-06-22 16:52:20 字數 1832 閱讀 7444

*.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 匯入 系統定義名字 類中的私有變數名 核心風格 避免用下劃線作為變數名的開始。因為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下 劃線作為變數名的開始。一般來講,...