2010-07-05 66 views
0

如果我創建一個nsmutablestring然後釋放它,不應該保留計數爲0嗎?Objective C NSMutableString *屬性保留奇數計數

我保留計數停留1

NSMutableString *text = [[NSMutableString alloc]init]; 

[text release]; 

NSLog(@"retain count %d ", [text retainCount]); 

我缺少的東西?

謝謝。

回答

6

無法保證retainCount將在對象生命週期的任何時間點都返回正確的值。如果您使用[[NSMutableString alloc] init]創建了NSMutableString,並且您只需要發佈一次,那麼您做的是正確的事情,不應該擔心。

+0

謝謝。我會運行性能工具,看看有沒有什麼奇怪的地方。 – user281300 2010-07-05 15:50:02

+0

我很想爲第一句話投你一票,但也讓你失望的是,當NSLog執行時,'text'可能(可能已經被)剛剛釋放的版本釋放了。 NSLog將retainCount發送到技術上不再存在的對象。 – JeremyP 2010-07-05 16:06:45

+0

嗯,你是對的,但我似乎沒有得到任何ACCESS_ERROR這是奇怪的,但我認爲該對象稍後以某種方式發佈。 – user281300 2010-07-05 16:14:22

1

Apple在其文檔中說,retainCount對於內存管理目的是沒有用的,因爲即使您釋放了它,框架和autorelease池也可以保留對象。 http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/retainCount

+0

嗯好,謝謝你的信息。那時我很難調試。 – user281300 2010-07-05 15:08:00

+0

@ user281300:爲什麼? Apple提供了許多工具來幫助您調試內存管理問題。 – JeremyP 2010-07-05 16:07:59

1

既然你是爲了調試的目的,我建議你使用類別來添加一些測試代碼到現有的類。任何時候你手動保留或釋放你的對象,你都可以調用你的新方法並使用它來跟蹤你的內存使用情況。

+0

謝謝,我也會嘗試 – user281300 2010-07-07 11:04:05