NSManagedObject是否保留其NSManagedObjectContext?

ma1*_*w28 4 core-data retain nsmanagedobject nsmanagedobjectcontext

NSManagedObject提供访问它NSManagedObjectContext,但它保留它吗?

根据Marcus Zarra的 " 在iOS上传递NSManagedObjectContext"," 内部NSManagedObject保留了对它的引用NSManagedObjectContext,我们可以访问它."

Zarra如何知道这一点并且他是否正确?

我问,因为我想知道是否NSManagedObjectContextdealloctearDown下面的方法中编辑.(我正在使用CocoaPlant.)

#import <SenTestingKit/SenTestingKit.h>
#import <CocoaPlant/CocoaPlant.h>

#import "AccountUser.h"

@interface AccountUserTests : SenTestCase {
    AccountUser *accountUser;
}
@end

@implementation AccountUserTests

- (void)setUp {
    accountUser = [AccountUser insertIntoManagedObjectContext:
                   [NSManagedObjectContext contextWithStoreType:NSInMemoryStoreType error:NULL]];
}

- (void)tearDown {
    [accountUser delete];
}

- (void)testFetchWithLinkedAccountUserID {    
    // Tests go here...
}

@end
Run Code Online (Sandbox Code Playgroud)

小智 8

NSManagedObject不保留对其NSManagedObjectContext的强引用.我在测试项目上检查了一下.因此,只要您使用其对象,就应该对NSManagedObjectContext保持强引用.


ado*_*oho 3

马特,

我认为 Marcus 可能误写了 NSManagedObject 保留其上下文。每个 NSManagedObject 都维护一个到上下文的链接。除非单个对象具有内部保留周期或保留在其上下文之外,否则根据我的经验,它们都会在上下文释放时被释放。如果他们保留了上下文,那么几乎肯定不会出现这种情况。

如上所述,您可以轻松编写代码来测试 Marcus 的主张。覆盖 -dealloc 并在调用时记录它。

IMO,最好的做法是保留您的上下文,直到您完成为止。依赖于未记录的行为可能并不明智。

安德鲁