我想打印出使用NSLog終端中的對象的保留計數。這裏是我的代碼:如何打印對象的保留計數?
NSNumber *myInt=[[NSNumber alloc] initWithInteger: 100];
NSLog(@"myInt retain count=%d",[myInt retainCount]);
結果應該是1但我在終端得到的是-1。我試圖使用%u而不是%d,並最終以4294967295結果。有誰知道爲什麼發生這種情況?
我想打印出使用NSLog終端中的對象的保留計數。這裏是我的代碼:如何打印對象的保留計數?
NSNumber *myInt=[[NSNumber alloc] initWithInteger: 100];
NSLog(@"myInt retain count=%d",[myInt retainCount]);
結果應該是1但我在終端得到的是-1。我試圖使用%u而不是%d,並最終以4294967295結果。有誰知道爲什麼發生這種情況?
@bbum送過來之前,我可以說了:
不要在你的代碼
依靠-retainCount
它不會給你解答你的期望。事實證明,答案-1在這裏是正確的,你不認爲這是正確的事實是因爲框架正在做你背後不知道的事情。使用自動引用計數(ARC),或者如果您必須使用手動保留/釋放,請按照內存管理指導原則進行操作,而不使用-retainCount
方法。
我的代碼基於一些舊例子。這是否意味着Apple在某個時候已經改變了Objective-C,因此retainCount不再像過去那樣運行? – 2012-07-16 15:42:16
不;除非在非常有限的情況下,retainCount永遠不可靠。 – 2012-07-16 15:48:45
ARC是否會返回retainCount應返回的內容?那麼保留呢?它是否也行爲不端? – 2012-07-17 12:27:44
'retainCount'沒用。別叫它。你所看到的是一個實現細節;返回的'NSNumber'可能是一個*標記的指針*,因此沒有分配,也沒有什麼可以保留。 – bbum 2012-07-16 16:17:04
因此,所有關於returnCount功能的書都只是簡單的扯皮呢? – 2012-07-17 12:29:23
他們可能被誤導而不是扯皮,但他們不準確。 Yup; – 2012-07-17 12:37:14