2010-10-17 69 views
0

我是新來的目標C,我有一個帶有3個對象的NSMutableArray,然後嘗試打印數組的retainCount。爲什麼最後的retainCount返回-1?由於在目標C中保留計數C返回-1

NSLog(@"myArray has retain count of %d", [myArray retainCount]);  
[myArray release]; 
NSLog(@"myArray has retain count of %d", [myArray retainCount]); 

結果從控制檯:

2010-10-17 11:58:06.407 TestRetainCount [527:a0f] myArray has retain count of 1 
2010-10-17 11:58:06.407 TestRetainCount [527:a0f] myArray has retain count of -1 

回答

3

後的一個對象被釋放(其可以在發佈後發生),你可以不再依賴於它的數據是完好的。您試圖在保留計數失效後相信保留計數。

在一般說明中,請勿使用保留計數。永遠。使用內存管理編程指南中的規則,您將始終獲得正確的引用計數。

-1

由於計時自動釋放對象,不能依賴精確的retainCount。也就是說,計算你的alloc/init,new,retain等等,並與相應的版本匹配。

+1

GC中沒有保留計數(至少不是ObjC條款)。而且,正如格雷厄姆所說的那樣,您實際上從來沒有看到保留計數爲0,因爲該對象在那段時間已經被釋放。 – bbum 2010-10-31 18:30:57

1

格雷厄姆李回答了具體到你的例子的問題。

UINT_MAX通常用於表示不使用的引用計數的對象(例如,被永遠不會釋放,如單體),或:

不特定於您的示例,但是您的問題(主題)

自定義引用計數實現。