若排版有錯誤,請檢視pdf版:
2) 管理範圍:任何繼承了
nsobject
的物件,對其他基本資料型別(int、char、float、double、struct、enum等)無效
1) 每個oc物件都有自己的引用計數器,是乙個整數,表示「物件被引用的次數」,即有多少人正在使用這個oc物件。
2) 每個oc物件內部專門有4個位元組的儲存空間來儲存引用計數器。
1) 當使用alloc、new或者copy建立乙個新物件時,新物件的引用計數器預設就是1。
2) 當乙個物件的引用計數器值為0時,物件占用的記憶體就會被系統**。
1) [p retaincount]; //
獲取當前的計數器
// nslog(@"%d", [p retaincount]);
2) [p retain]; //
計數器+1
,retain
方法返回的是物件本身。
3) [p release]; //
計數器-1
,沒有返回值。
4) dealloc
當乙個物件要被**的時候,就會呼叫
重寫dealloc方法時,一定要呼叫[super dealloc],這句呼叫要放在最後面。
1) 當乙個物件的引用計數器值為0時,它將被銷毀,其占用的記憶體被系統**
2) 當乙個物件被銷毀時,系統會自動向物件傳送一條dealloc訊息
3) 一般會重寫dealloc方法,在這裡釋放相關資源,dealloc就像物件的遺言
4) 一旦重寫了dealloc方法,就必須呼叫[super dealloc],並且放在最後面呼叫
5) 不要直接呼叫dealloc方法
6) 一旦物件被**了,它占用的記憶體就不再可用,堅持使用會導致程式崩潰(野指標錯誤)
exc_bad_access : 訪問了一塊壞的記憶體(已經被**、已經不可用的記憶體)
p = nil; //
空指標:沒有指向任何東西的指標,給其傳送訊息不會報錯。
野指標:指向殭屍物件(不可用記憶體)的指標。
// 當乙個
person
物件被**的時候,就會自動呼叫這個方法
- (void)dealloc
- (book *)book
- (void)dealloc
@end
int main()
1) 基本資料型別:直接複製
- (void)setage:(int)age
1) 一定要[super dealloc],而且放到最後面
2) 對self(當前)所擁有的其他物件做一次release
- (void)dealloc
} // }
表示結束,銷毀釋放池
1) alloc之後呼叫了autorelease,又呼叫release
@autoreleasepool
黑馬程式設計師 OC 記憶體管理
1.什麼是記憶體管理 管理範圍 任何繼承了nsobject的物件,對其他基本型別無效 2.物件的基本結構 每個oc物件都有自己的引用計數器,是乙個整數,表示 物件被引用的次數 即有多少個人正在使用oc物件 每個oc物件內部專門有4個位元組的儲存空間來儲存引用計數器 3.引用計數器的作用 當使用all...
黑馬程式設計師 OC基礎 記憶體管理
oc的區域性變數在 塊結束時被系統銷毀,記憶體被 oc的物件,內部有引用計數器,當引用計數器的值為0時,被系統銷毀,記憶體被 區域性變數存放在棧中.物件存放在堆中.注意,物件指標還是存放在棧中,物件本身占用的記憶體存放在堆中.在oc中,我們要對自己寫的繼承了nsobject的物件進行記憶體管理.物件...
黑馬程式設計師 OC學習筆記 記憶體管理
property和 synthesize關鍵字 property和 synthesize關鍵字可以幫助我們構造屬性的設定和訪問方法即setter和getter方法,可以省去我們很多重複機械的 在宣告檔案中使用 property 宣告變數,在實現檔案中用 synthesize property 關鍵字...