self和下劃線的用法區別

在最新的xcode中,已經不需要我們自己去寫 set,get 方法,系統已經自動幫我們生成set,get方法。
同時我們發現在我們訪問我們聲明的變量時,會有self. 和 以"_"開頭的訪問方式,那麼這兩種方式到底有什麼樣的區別呢?

我們來一起看一下:

@property (retain, nonatomic) NSMutableArray *nameArray
self.nameArray是訪問屬性的,而_nameArray是訪問實例變量的.

屬性是實例變量加上GET,SET方法的一個整合體,他主要是承擔一個外部訪問的一個接口!

實例變量只能在本類中纔可以訪問,外部不可以訪問!

總的原則:

在類內部訪問變量的時候用“_”;

在類外部也就是其他類裏訪問這個類的變量時用“.” 語法;

注意事項:

手動管理內存的情況下:

使用“.”語法來初始化變量的時候,會產生內存泄漏的問題:

self.nameArray = [NSMutaleArray alloc] init];

上述代碼,造成的問題是,在self.nameArray的時候相當於調用了set方法,引用計數+1,後面alloc的時候,引用計數再次+1。
在我們最後dealloc中release的時候,引用計數只減了一次,並沒有完成全部釋放,這樣就造成了內存泄漏的問題。

解決方法:就是用“_”來初始化以及訪問變量,這樣就不會產生內存問題,雖不是什麼高明的辦法,但的確有效。

_nameArray = [NSMutaleArray alloc] init];

上述便是“.”和“_”在使用的時候的簡單區別。

如果是在ARC(自動管理內存)的情況下雖然不存在上述問題,但從編碼規範來考慮,還是注意點兒的好。

發佈了21 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章