关于MagicalRecord的问题

时间:2013-12-26 19:17:25

标签: ios core-data magicalrecord

1 - MagicalRecord与ARC兼容吗?

2 - 对于此代码

+ (NSManagedObjectContext *) MR_context NS_RETURNS_RETAINED

NS_RETURNS_RETAINED表示将保留上述方法创建的NSManagedObjectContext,以便在完成后如何确保将其从内存中删除?

3 - 甚至在内部使用@autoreleasepool块for循环对使用

获取的NSManagedobject个实体进行更新
+ (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context

随后致电

[context save:nil];
[context reset];

没有释放内存,而且还在不断增加。为什么在reset上调用NSManagedObjectContext不会使获取的实体无效?这些实体也有关系。 context的类型为NSPrivateQueueConcurrencyType

2 个答案:

答案 0 :(得分:0)

我会尽力回答你的问题。

1-是的。神奇的记录与ARC兼容。我在测试项目中添加了最新的源代码,并且我确认没有release调用。此外,还使用weak限定词。

2 - 不用担心。在ARC下,将为您管理内存。您可以在Migrating your code to Objective-C ARC找到一个很好的解释。另请参阅Objective-C Automatic Reference Counting (ARC) 3.2.2 部分。

3 - 这取决于你的代码。执行reset它将清除特定的上下文,因此内存占用量会更小。无论如何,在这里你应该添加一些细节。

我不知道Magical Record的深度,但即使是一个好的lib(我认为Saul Mora做得很好)我认为你可以保持简单的Core数据,因为它可能更难找到错误。

答案 1 :(得分:0)

要回答问题3,您没有看到在代码中释放内存分配的原因,例如:

@autoreleasepool {
    /// working stuff up here
    [context reset];
}

基本上是因为你无法控制那个记忆。核心数据(您获得的NSManagedObjectContext)将为您缓存对象。它还在内存中的NSPersistentStoreCoordinator中缓存对象数据。通常,一旦完成它就应该释放整个上下文,以查看一些(甚至很小的)内存使用量下降。不要担心创建许多上下文,它们是轻量级的,并且意味着可以在这样的地方创建。