OC記憶體管理

2021-08-21 07:50:33 字數 2030 閱讀 1254

1.記憶體管理 (isa 指標,superclass 指標,returncount 初始值就為1 【引用計數器,記錄物件什麼時候需要銷毀】)

1.建立類存分配弓箭,儲存物件

2.初始化成員變數

3.返回物件的指標位址

//物件再完成建立的同時,內部會自動建立乙個引用的計數器,

這個計數器,是系統用來判斷是否**物件的唯一依據,當我們的引用計數retaincount=0 的時候,系統會毫不猶豫**物件

2.兩個物件方法[物件 release] 銷毀物件 retaincount-1

3.[物件 retain] 銷毀物件 retaincount-1 返回self 指標

4.我們的引用計數器retaincount =0 的時候,物件就銷毀了

5.dealloc 函式 當乙個物件要被銷毀了的時候,系統會自動呼叫dealloc函式,通知物件將要被銷毀

//手動記憶體管理方法

1.野指標操作 (指向不存在的物件指標)

2.記憶體洩露

//記憶體管理原則 (配對原則)

只要出現new,alloc,retain 就一定配對出現乙個 release,autorelease

在物件自身被銷毀之前,一定要先呼叫[super dealloc] 釋放父類中的相關物件

nsuintager p=物件.retaincount;

1.指標操作

物件會預設呼叫

person *p=[[person alloc]init];

p=nil;

[p release]; //系統以及將p所指向的物件**了

[p ]

避免野指標操作方法

//exc _bad_access 錯誤表示 訪問了不可訪問的物件

// 被系統**的物件我們稱之為殭屍物件

// 預設情況下,為了提高編碼效率,不是實時監測殭屍物件

-(nsstring *)

1.避免也指正操作的方法

1.如果您確定當作用域中的物件不會在被使用了,[p release] 不適用物件了,為了防止野指標操作,通常我們會把,不再使用的物件,執政變數,賦值為nil

2.記憶體洩露

–第一種情況

申訴 [p retain] retrincount+1

[p release] retaincount -1 retaincount=0 才會被銷毀,

出現了物件一直殘留在作用域中,一直不銷毀,就會出現記憶體洩露

–第二種情況

person *p=[[person alloc]init];

p=nil;

[p release];//[nil release] 等於將nil 進行釋放

–第二種情況

preson *p=[[preson alloc]init];

p.age=20;

[p run];

person *p1=p; //同時了指向了乙個記憶體位址

[p1 release];//

p1.age=20; 野指標訪問

-(void) dealloc

多個物件的記憶體管理

1.要保證擁有的物件再使用的地方也要存在,應該在使用後,後面無需再使用,才能進行[物件 release];

[物件 retain]//能夠使得 retaincount +1 並且返回self物件

autorelease

記憶體配對:new ,alloc retain 方法就要配對 release autorelease

@autoreleasepool 自動釋放池

//物件存入到自動釋放池中,當池子被小銷毀的時候,他會對池子中所有的物件

進行一次release 操作

//代表池子的作用域

@autoreleasepool //代表池子將要被銷毀,對池子所有的物件release

加入基礎,就會銷毀幾次

release rataincount-1

autorelease 只是將物件放入池子中,然後返回乙個self

Oc 記憶體管理

1 對你自己擁有的物件負責,你只能釋放你擁有的物件 2 凡是你通過 retain alloc copy等手段獲得了所有者的物件,都必須在你不使用的時候來呼叫release autorelease等手段來釋放對他的所有權 3 在一定的 段內,對同乙個物件所作的copy alloc retain的操作次...

OC記憶體管理

1.記憶體管理原則 如果對乙個物件使用了alloc mutable copy retain,那麼你必須使用相應的release或者autorelease。2.管理範圍 任何繼承了nsobject 的物件,對其他基本資料型別 int char float double struct enum等 無效 ...

OC 記憶體管理

管理範圍 任何繼承nsobject的物件,對其他的基本資料型別無效。判斷物件要不要 的唯一依據就是計數器是否為0,若不為0則存在。所以對記憶體的管理就是對計數器的管理 1 retain 計數器 1,會返回物件本身 2 release 計數器 1 沒有返回值 3 retaincount 獲取當前的計數...