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