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
。
答案 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中缓存对象数据。通常,一旦完成它就应该释放整个上下文,以查看一些(甚至很小的)内存使用量下降。不要担心创建许多上下文,它们是轻量级的,并且意味着可以在这样的地方创建。