拥有NSManagedObject子类:
@interface ManagedActivityAmount : NSManagedObject
@property (nonatomic, retain) NSNumber * distance;
@property (nonatomic, retain) NSNumber * duration;
@property (nonatomic, retain) NSSet *sets;
@end
@interface ManagedActivityAmount (CoreDataGeneratedAccessors)
- (void)addSetsObject:(ManagedPowerSet *)value;
- (void)removeSetsObject:(ManagedPowerSet *)value;
- (void)addSets:(NSSet *)values;
- (void)removeSets:(NSSet *)values;
@end
我在使用:
保持对我添加到集合关系的对象的引用时遇到问题 - (void)addSetsObject:(ManagedPowerSet *)value;
ManagedPowerSet对象已成功添加到ManagedActivityAmount sets属性中,并且我假设它的保留计数为1(因此实际对象在此之前自动释放,因此在将其添加到集合之前保留计数为0)。我对么?我错过了什么吗?
我将ManagedPowerObject分配给视图控制器的另一个实例变量(这是一个私有实例变量,而不是保留属性),但我似乎无法在以后访问它。我应该保留吗?我正准备这样做并检查,但我真的想明白我们并没有保留它。
谢谢:)
答案 0 :(得分:0)
如果您不使用ARC,则必须声明所有您打算在以后使用的所有权(保留)。当你完成它时释放它(对于ivars,这通常是在类的dealloc实现中)。我建议您使用属性来执行此操作,因为它通常会减少编码。这是因为您必须始终在分配新指针之前释放旧指针:
[_managedPowerObject release];
_managedPowerObject = [managedPO retain];
只要直接分配给ivar(实例变量),就会使用它。或者你可以使用一个属性:
@property (nonatomic, retain) ManagedPowerObject *managedPowerObject;
该属性的默认实现将为您处理释放/保留,现在您只需使用:
self.managedPowerObject = managedPO;
我建议阅读Apple的内存管理指南: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html#//apple_ref/doc/uid/10000011-SW1
答案 1 :(得分:0)
所以我没有遗漏任何东西,保留计数假设是正确的,因为对象比控制器更长,所以不需要保留,如果它是应该分配的属性..
这个问题对我来说真的很愚蠢,我没有分配其他让它看起来像对象丢失的东西,但实际上并没有。
至于调试器,似乎两个指针应该指向同一个地址但不是 - 我不知道为什么会发生这种情况,我猜xcode调试器有一些延迟..