記憶體管理的原則 :
1:如果物件有人在使用,那麼就不應該**。如果你想使用這個物件,就應該讓這個物件retain一次。如果你不想用這個物件了,就應該讓這個物件release一次。
2:誰建立 誰release (哪個物件建立了空間,那個物件就release)
3:誰retain 誰release (哪個物件的空間引用計數器retain了,哪個物件就release)
引用計數器
用來儲存當前物件有幾個東西在使用它(數字)
用來判斷物件是否應該**記憶體空間(如果物件不等於nil,當引用計數器為0,此時要**物件的記憶體空間)
操作retain 使得引用計數器+1
release 使得引用計數器-1
retaincount 得到引用計數器的值
如果乙個物件被釋放的時候,會有「臨終遺言」(會呼叫該物件的dealloc方法)
dealloc方法是nsobject的,一般我們要重寫dealloc方法
在dealloc方法內部,要呼叫[super dealloc];
@implementation person
-(void)dealloc
@end
#import #import "person.h"
int main(int argc, const char * argv)
return 0;
}
記憶體管理研究的內容:1:野指標:定義的指標變數沒有初始化或者是指向的空間已經被釋放。2:記憶體洩露:如果棧區的指標變數已經被釋放了,而堆區的空間還沒有釋放,堆區的空間就被洩露。單個物件的記憶體管理(野指標):
1:野指標錯誤:訪問了一塊壞的記憶體(已經被**的不可用的記憶體)。
2:殭屍物件:所佔記憶體已經被**的物件, 殭屍物件不能再被使用。
3:空指標:物件值為空,沒有指向任何東西的指標,給空指標傳送訊息不會報錯。
nil: 表示物件的值
nil:表示類的值
null:通用指標(泛型指標)
[nsnull null]: 是乙個物件,他用在不能使用nil的場合
4: 當乙個物件的空間被釋放了,引用計數器為0,這個物件是殭屍物件,如果再用[物件名 retain]方法是不行的
set方法記憶體管理標準寫法
-(void)setcar:(car *)car
}
@property
引數的使用
arc的概念
強指標:預設的情況下,所有的指標都是強指標,關機子strong
弱指標:__weak關鍵字修飾的指標
在工程中使用arc非常簡單:只需要像往常那樣編寫**,只不過永遠不寫retain,release和autorelease
三個關鍵字就好~這是arc的基本原則。
arc的工作原理
在**編譯時為你自動在合適的位置插入release或autorelease。
arc的判斷準則
只要沒有強指標指向物件,物件就會被釋放
注意:當使用arc的時候,暫時忘記「引用計數器」,因為判斷標準變了。
arc特點總結
1、不允許呼叫release,retain,retaincount
2、允許重寫dealloc,但是不允許呼叫[super dealloc]
3、@property
strong :相當於原來的retain(適用於oc物件),成員變數是強指標
weak :相當於原來的assign(適用於oc物件),成員變數是弱指標
assign :適用於非oc物件型別(基礎型別)
arc使用注意事項
1、arc中,只要弱指標指向的物件不在了,就直接把弱指標做清空(賦值為nil)操作。
2、 __weak person *p =[[person alloc] init] 不合理,物件一建立處理啊就被釋放掉,物件釋放掉後,arc把指標設定為nil
3、
黑馬程式設計師 OC 記憶體管理
1.什麼是記憶體管理 管理範圍 任何繼承了nsobject的物件,對其他基本型別無效 2.物件的基本結構 每個oc物件都有自己的引用計數器,是乙個整數,表示 物件被引用的次數 即有多少個人正在使用oc物件 每個oc物件內部專門有4個位元組的儲存空間來儲存引用計數器 3.引用計數器的作用 當使用all...
黑馬程式設計師 OC學習筆記 記憶體管理
property和 synthesize關鍵字 property和 synthesize關鍵字可以幫助我們構造屬性的設定和訪問方法即setter和getter方法,可以省去我們很多重複機械的 在宣告檔案中使用 property 宣告變數,在實現檔案中用 synthesize property 關鍵字...
黑馬程式設計師 OC基礎 記憶體管理
oc的區域性變數在 塊結束時被系統銷毀,記憶體被 oc的物件,內部有引用計數器,當引用計數器的值為0時,被系統銷毀,記憶體被 區域性變數存放在棧中.物件存放在堆中.注意,物件指標還是存放在棧中,物件本身占用的記憶體存放在堆中.在oc中,我們要對自己寫的繼承了nsobject的物件進行記憶體管理.物件...