2012-07-16 25 views
0

我想打印出使用NSLog終端中的對象的保留計數。這裏是我的代碼:如何打印對象的保留計數?

NSNumber *myInt=[[NSNumber alloc] initWithInteger: 100]; 
NSLog(@"myInt retain count=%d",[myInt retainCount]); 

結果應該是1但我在終端得到的是-1。我試圖使用%u而不是%d,並最終以4294967295結果。有誰知道爲什麼發生這種情況?

+1

'retainCount'沒用。別叫它。你所看到的是一個實現細節;返回的'NSNumber'可能是一個*標記的指針*,因此沒有分配,也沒有什麼可以保留。 – bbum 2012-07-16 16:17:04

+0

因此,所有關於returnCount功能的書都只是簡單的扯皮呢? – 2012-07-17 12:29:23

+1

他們可能被誤導而不是扯皮,但他們不準確。 Yup; – 2012-07-17 12:37:14

回答

3

@bbum送過來之前,我可以說了:

不要在你的代碼

依靠-retainCount它不會給你解答你的期望。事實證明,答案-1在這裏是正確的,你不認爲這是正確的事實是因爲框架正在做你背後不知道的事情。使用自動引用計數(ARC),或者如果您必須使用手動保留/釋放,請按照內存管理指導原則進行操作,而不使用-retainCount方法。

+0

我的代碼基於一些舊例子。這是否意味着Apple在某個時候已經改變了Objective-C,因此retainCount不再像過去那樣運行? – 2012-07-16 15:42:16

+0

不;除非在非常有限的情況下,retainCount永遠不可靠。 – 2012-07-16 15:48:45

+0

ARC是否會返回retainCount應返回的內容?那麼保留呢?它是否也行爲不端? – 2012-07-17 12:27:44