· 當你呼叫alloc/init的時候,你得到乙個引用計數是1的物件。
· 當你用完這個物件之後,你要對它呼叫release訊息,使其引用計數為0,這樣它的記憶體才會被釋放掉。
· 當你呼叫乙個方法,它不是以init或者copy開頭的,這時,返回給你的物件是autorelease的,它是一種在將來某個時刻會自動被釋放的物件。(這裡我也要提醒大家一句,比如你在寫乙個函式,它的名字是***,沒有以init或者copy開頭,那麼記得你返回的物件一定要是autorelease的,否則,別人在使用你這個函式的時候就會把它當前是autorelease的,那麼他就不會release它,這樣就會造成記憶體洩漏,千萬要切記!!!)
· 如果你想繼續使用autorelease物件,那麼你就要給它放送乙個retain訊息。
· 如果你使用alloc/init方法建立了乙個物件,但是你想讓它自己在出了runloop之後被自動釋放的話,那麼你可以在alloc/init之後再呼叫autorelease。這也是一種見得比較多的寫法了。比如,cocos2d裡面呼叫[*** node]的時候,就等於[[[*** alloc] init]autorelease].
-(void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath*)indexpath {
nsstring * sushiname = [_su****ypesobjectatindex:indexpath.row]; // 1
nsstring * sushistring = [nsstringstringwithformat:@"%d: %@",
indexpath.row, sushiname]; // 2
nsstring * message = [nsstringstringwithformat:@"last sushi: %@. cur sushi: %@", _lastsushiselected, sushistring]; // 3
uialertview *alertview = [[[uialertviewalloc] initwithtitle:@"sushi power!"
message:message
delegate:nil
cancelbuttontitle:nil
otherbuttontitles:@"ok", nil] autorelease]; // 4
[alertview show]; // 5
[_lastsushiselected release]; // 6
_lastsushiselected = [sushistring retain];// 7
這裡的**比較多,讓我們一行一行來看:
1. 查詢當前行對應的sh****ypes陣列裡面的字串。
2. 根據當前行號構建乙個新的字串。注意,這裡使用的是stringwithformat方法,它返回的是乙個autorelease的字串。因為這個方法並不是以init或者copy開頭,所以你就知道。記住,這意味著,你可以在這個函式裡面使用此字串,但是出了這個函式的話,如果你還想繼續使用之,那必須要對它傳送乙個retain訊息。
3. 構建乙個訊息,用來顯示當前選中的sushi和最後選中的sushi。和上面一樣,這裡也是使用的stringwithformat方法,它返回的是乙個autorelease物件。因為我們只想在這個函式裡面使用,所以沒有retain。
4. 建立乙個alertview來顯示剛剛構建的那個訊息。這裡是通過alloc/init方式建立的,所以我們需要在之後再傳送乙個autorelease訊息,這樣在出了這個函式以後,這個物件就會被釋放掉了。
5. 顯示這個alert view。
6. 再你設定lastsushiselected例項變數之前,你需要先釋放當前的lastsushiselected例項變數,如果當前例項變是已經是nil的話,也沒有關係,因上nil物件可以接收任何訊息。
7. 因為你想在這個函式之外再使用lastsushiselected這個字串,所以你需要retain它。
還有一件事你不能忘記。為了儲存不會有任何記憶體洩漏,你需要在rootviewcontroller的dealloc方法裡面呼叫下面方法來釋放記憶體:
[_lastsushiselectedrelease];
_lastsushiselected= nil;
基本上,在dealloc方法被裡面,你需要對「你負責的物件」傳送release訊息,並且要把它賦值為nil。
Object C中管理記憶體
object c之中採用一種保留記錄的方式記錄我們所建立的所有的物件,並且,當該計數減少為0的時候,object c自動收回分配給乙個物件的記憶體。text text1 text alloc init text text2 text alloc init 每乙個物件的計數都為1,我們可以通過reta...
Object c記憶體管理
記憶體管理 物件的生命週期包括以下幾個時期 物件初始化 物件接收訊息和執行操作 物件被釋放 判斷乙個物件是否結束,用到引用計數器 引用計數器的基本概念 1 每個人物件有乙個整數值,這個整數值與物件本身關聯,稱為引用計數器 2 當某些地方需要使用這個物件時,可以將引用計數器加1,表示使用這個這個物件 ...
Object C 記憶體管理
object c 記憶體管理 一 基本概念 1.iphone系統中的objective c的記憶體管理機制是比較靈活的,即可以拿來像c c 一樣用,也可以加個autoreleasepool讓它公升級為半自動化的記憶體管理語言 2.引用計數是例項物件的記憶體 唯一參考 引用計數 retaincount...