【发布时间】:2011-03-20 19:18:18
【问题描述】:
我在释放 m 个核心数据对象时遇到了很多麻烦。我什至尝试了我能想到的最简单的测试,我观察了保留计数,它似乎总是比我预期的要高。我还在核心数据对象的 dealloc 例程上设置了一个断点,它似乎没有被调用(至少不会被调用,除非我特别添加了其他版本)。
顺便说一句,我肯定有 [managedObjectContext setRetainsRegisteredObjects:NO],所以这不是问题。
这是一个我试过但不起作用的例子:
MobileObject *obj = [NSEntityDescription insertNewObjectForEntityForName:@"MobileObject" inManagedObjectContext:managedObjectContext];
NSLog(@"Object count after creation %d", [obj retainCount]);
NSError *error;
[managedObjectContext save:&error];
NSLog(@"Object count after saving %d", [obj retainCount]);
每条日志消息都打印出“2”。 Dealloc 永远不会被调用。我希望保存会导致对象被释放(或自动释放),因为核心数据应该意识到它不需要保留。在这种情况下,如果有两个自动释放(一个来自创建,一个来自保存),则保留计数 2 是有意义的,但情况似乎并非如此。如果我添加
[obj release]
在我的测试结束时,dealloc 例程将被正确调用,但我很困惑为什么我需要这个版本。
【问题讨论】:
标签: objective-c core-data memory-management