記憶體管理(1)

2021-06-25 12:44:45 字數 1120 閱讀 1922

記憶體管理

如果對乙個物件使用了alloc,[mutable]copy[withzone:] 或者retain,那麼你必須使用相應的release或者autorelease。

基本型別 (任何c的型別)如:int,long,long long,struct等。

記憶體管理對於c語言基本型別無效。

oc型別 (非基本型別)

任何繼承於nsobject型別的物件屬於oc型別,也就是除了c的任何型別。

所有的oc型別物件都有乙個叫retaincount的變數,叫做計數器,用於儲存當前被引用的數量。如果計數為零,就真正釋放這個物件。

alloc函式是建立物件使用,建立完成後計數器為1,只用一次。

retain函式是對乙個計數器加1,可以使用多次。如果需要引用物件就可以向物件傳送retain訊息。

release函式是對計數器減1,當計數器減到0時,物件就會自動呼叫dealloc函式,從記憶體中釋放。如果不需要引用物件,可以給物件傳送release訊息。並且,計數器為0的物件,不能再使用release和其他方法。

遛狗原理

person.h

#import 「foundation/foundation.h"

#import 「dog.h"

@inte***ce person: nsobject

- (void) setdog: (dog *) adog;

- (dog *) dog;

@end

person.m

@implemation person

- (void) dealloc

- (dog *) dog

- (void) setdog: (dog *) adog

}@end

dog.h

@inte***ce dog: nsobject

@property int id;

@end

dog.m

@implemation dog

@synthesize id = _id;

- (void) dealloc

@end

main.m

#import 「foundation/foundation.h」

int mian ()

記憶體管理(1)

在c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區 常量儲存區。棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個n...

apache記憶體管理1

如果由作業系統進行管理記憶體,作業系統在分配和管理記憶體,應該會存在使用者態與核心態的切換,而且會有位址空間的預定和調撥物理儲存器等一系列的操作,而這些操作是不可控的,極大的影響了效率。apache自己管理記憶體,速度是乙個重要的原因。每一連續的記憶體 邏輯上,物理上的位址空間不一定是 都由記憶體管...

objective c 記憶體管理1

import 方法的基本使用 1.retain 計數器 1 會返回物件本身 2.release 計數器 1,沒有返回值 3.retaincount 獲取當前的計數器 4.dealloc 當乙個物件要被 的時候,就會呼叫,一定要呼叫 super dealloc 這句呼叫要放在最後面 概念殭屍物件 所占...