set方法記憶體分析 1

2021-07-09 14:44:09 字數 1060 閱讀 5110

這個之前的記憶體管理分析中,存在一些問題,比如說在多個物件中,要保證乙個物件沒有被系統**之前,不能被銷毀掉,就像下面的這個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方法的記憶體...