self.和_的區別(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(自動管理內存)的情況下雖然不存在上述問題,但從編碼規范來考慮,還是注意點兒的好。

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM