記憶體管理
如果對乙個物件使用了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 這句呼叫要放在最後面 概念殭屍物件 所占...