2010-06-06 81 views
1

可能重複:
NSNumber retain count issue目標C - 釋放問題

你好, 我有以下代碼:

NSNumber *number = [NSNumber numberWithInt:5]; 
int i = [number retainCount]; 
[number release]; 
i = [number retainCount]; 
     [number release]; 
     i = [number retainCount]; 

的問題是,在第2行,參數i的值是2 ,而第4行的值是1. 然後在第6行的值仍然是1。

首先,我不明白爲什麼在init *號後retaincount是2而不是1? 秒我不明白爲什麼發佈後2次retaincount不是0? 它不事關我釋放了多少次的對象retaincount留1

回答

3

的問題是,你不應該看對象的「retainCount」,除非你真的知道你在做什麼,這是你只會迷惑你。

發生什麼事是NSNumber在幕後做了些事情。我不確定是什麼,我通常不在乎。如果我創建了一個基礎,我有責任釋放它。只要我履行了自己的責任,一切都將按照原則行事。

在您的具體示例中,您將獲得對「NSNumber」的引用並將其釋放兩次。既然你不擁有這個對象,你根本不應該釋放它。


爲了澄清,你不應該看保留計數的原因是它經常會誤導你。從評論中的鏈接引用@chuck。

如果你懷疑你有泄漏,你應該檢查真正用於此目的的調試工具,而不是通過戳保留計數。對於你正在編寫的代碼,你應該首先關注遵循上面鏈接的指導原則。

+0

首先感謝您的幫助。 我不明白爲什麼我不是自己的那個對象(我創建它!) 有沒有對象,我創建並沒有需要釋放?像死亡的函數結束的對象? 我怎麼知道我創建的對象是否是初始化的autorelease? 謝謝 – amir 2010-06-06 21:07:43

+0

閱讀http://developer.apple.com/mac/library/iPad/index.html#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html – kubi 2010-06-07 00:28:01

+0

一般來說,除非你使用'alloc','copy'或'新'來創建一個對象,你不擁有它。 – kubi 2010-06-07 00:30:43