【发布时间】:2010-04-29 20:53:56
【问题描述】:
iPhoneOS 3.2
我使用 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 retainCount]
目标不响应此消息选择器。
【问题讨论】:
-
好吧,如果 lingeringData 不再是有效对象,您可能会明白这一点。
-
我应该明白这一点。它表明我没有在其他地方保留 NSData 对象。
标签: iphone iphone-sdk-3.2