使用self 導致的記憶體洩露

2021-06-09 02:25:20 字數 1060 閱讀 7116

原文連線

ps:在新的框架中似乎不用考慮這些了,系統應該會自動計數和釋放。

請看第一段**:

在myobject.m中

self.aobj = [[nsobject alloc] init];

......

- (void)dealloc

你能否看出這裡的記憶體洩露?

接下來看第二段:

aobj = [[nsobject alloc] init];

......

- (void)dealloc

你能否看出這裡是否也有記憶體洩露呢?

如果你都能夠很確定的知道洩露的原因,那麼下面的文字,你就不需要閱讀了,找個養眼的,養養眼吧。相反,如果你不確定,那麼,下面的內容就對你很有幫助。

首先給沒看出來的同學普及@property生成的set和get方法的具體內容:

- (nsobject *)aobj

- (void)setaobj:(nsobject *)newobj

}現 在,將第一段**,帶入到這個set方法中去,你就能發現 self.aobj = [[nsobject alloc] init];是乙個永遠不會被釋放的物件,aobj這個物件所對應的指標在alloc的時候被retain了一次retaincount=1,在set方 法中又被retain了一次,所以retaincount=2,在dealloc方法中,只有一次release,所以,retaincount=1,這 個指標空間就不會被釋放,而第二段**中,並沒有使用set方法,而是將 [[nsobject alloc] init];的指標付值給aobj這個變數。只有一次alloc。故在程式執行dealloc方法的時候,這個指標空間就可以被釋放。

下面給大家一段正確使用和釋放self.的例子

nsobject *newobj = [[nsobject alloc] init];

self.aobj = newobj;

[newobj release];

......

- (void)dealloc

對於@property([copy|assign])這兩種情況,大家可以參考這個鏈結的文章。

使用self 導致的記憶體洩露

請看第一段 在myobject.m中 self.aobj nsobject alloc init void dealloc 你能否看出這裡的記憶體洩露?接下來看第二段 aobj nsobject alloc init void dealloc 你能否看出這裡是否也有記憶體洩露呢?如果你都能夠很確定的...

迴圈retain導致記憶體洩露

dog.h import class person inte ce dog nsobject property nonatomic,retain person owner end person.h import class dog inte ce person nsobject property n...

Flex Fade效果導致記憶體洩露

因為這個問題,害我找了一晚上,乙個物件始終無法被釋放,崩潰了 最後在幾千行 裡逐一排查,終於找到了這個罪魁禍首 具體原因 通常我們給物件設定效果事件時如下 this.setstyle hideeffect o fadeout this.setstyle showeffect o fadein 當執行...