這個之前的記憶體管理分析中,存在一些問題,比如說在多個物件中,要保證乙個物件沒有被系統**之前,不能被銷毀掉,就像下面的這個demo一樣,person有一輛車,但是他覺得這輛車他不喜歡了,他想換一輛車,那我有2個car的物件,該怎麼去處理這個記憶體管理的問題.
#import
#import
"person.h"
int main(int argc, const
char * argv)
return
0;}
#import
#import "car.h"
@inte***ce
person : nsobject
- (void)setcar:(car *)car;
- (car *)car;
- (void)driver;
@end
#import "person.h"
@implementation
person
- (void)setcar:(car *)car
- (car *)car
- (void)driver
- (void)dealloc
@end
car的介面檔案就省略了
這裡是實現部分
#import "car.h"
@implementation
car- (void)run
- (void)dealloc
@end
分析:如果在set方法中不先去release掉原來擁有的這輛車的話,導致的一種情況是,我set第一輛車c1過來的時候,應用計數器當時為2,在p物件銷毀之前,不會去呼叫dealloc方法中的release方法,建立c1物件對應要自己release一次,計數器減為1,這時,c2的set方法把c2這輛車給了p,_car擁有的就是c2,到最後,p銷毀的時候,release的也是c2,導致c1沒有正常釋放掉,c1就存在記憶體洩露,因此需要在set方法中主動的release掉原來的物件 set方法記憶體分析 2
應用場景與上乙個分析場景相同,都是人去擁有一輛車,這次的問題是我不是去重新擁有一輛車,而是我去多次set同一輛車的時候,會存在一些問題,如 import import person.h int main int argc,const char argv return 0 import import ...
set方法與記憶體管理
區域性變數,使用完以後不再使用就release 全域性變數,在dealloc裡面release。指標物件要自己操作自己。retaincount指的是物件引用計數。self賦值方式 computer cmp computer alloc init cmp物件retaincount 1 self.com...
set方法的記憶體管理細節
一 多個物件之間的記憶體管理 1.你想使用 占用 某個物件,就應該讓物件的計數器 1 讓物件做一次retain操作 2.你不想再使用 占用 某個物件,就應該讓物件的計數器 1 讓物件做一次release 3.誰retain,誰release 4.誰alloc,誰release 二 set方法的記憶體...