的iPhoneOS 3.2NSData的版本中,不回收內存
我用NSKeyedUnarchiver的unarchiveObjectWithFile:加載包含一個大的NSData和另一個小得多對象的自定義對象。我的自定義對象中的dealloc方法被調用,NSData對象被釋放,其之前的retainCount == 1。物理內存不會減少任何數量,更不用說NSData大小的一小部分了,並且可靠地生成重複內存警告:我有測試,直到我實際收到2級警告。 =(
NSString *archivePath = [[[NSBundle mainBundle] pathForResource:@"lingering"]
ofType:@"data"] retain];
lingeringDataContainer = [[NSKeyedUnarchiver unarchiveObjectWithFile:archivePath] retain];
[archivePath release];
[lingeringDataContainer release];
現在的dealloc ....
- (void) dealloc {
[releasingObject release];
[lingeringData release];
[super dealloc];
}
釋放之前:
(GDB)P(INT)[(NSData的*)lingeringData retainCount]
$ 1 = 1
後:
(GDB)p(INT)[(NSData的*)揮之不去數據保留計數]
目標不響應此消息選擇器。
那麼,你很可能得到,如果lingeringData不再是一個有效的對象。 – 2010-04-30 01:41:48
我應該明白這是我的觀點。它表明我不保留其他地方的NSData對象。 – ctpenrose 2010-04-30 07:22:12