我工作的一个core data
应用多线程操作,其中我需要处理很多文件。
我进行插入,删除,更新等,在使用这些文件的详细信息的核心数据。
由于处理DATAS的数量巨大,我使用单独NSManagedObjectContext
为每个线程操作。(保持为mainThread主上下文)。
为了方便NSManagedObjectContext
管理我设定的范围内成线字典。
我没有任何使用这种方法的关键内存松动,但是当我运行xcode仪器泄漏工具时,它显示与NSManagedObjectContext
相关的泄漏对象的数量。
但是我发现,背景完全消除时,线程退出。(因为当前线程的操作后,杀死自己,线程词典还清洗)。
下面给出的代码用于获取managedObjectContext
-(NSManagedObjectContext*)managedObjectContext {
NSManagedObjectContext *context = nil;
if ([NSThread isMainThread]) {
if (!managedObjectContext) {
context = [NSManagedObjectContext newContextForPersistentStoreCoordinator:[self persistentStoreCoordinator]];
[self setManagedObjectContext:context];
}
context = managedObjectContext;
}
else {
//find context for this thread.
NSMutableDictionary *threadDictionary = [[NSThread currentThread] threadDictionary];
context = [threadDictionary objectForKey:kManagedObjectContextKey];
if (!context) {
//create a new context for this thread.
context = [NSManagedObjectContext newContextForPersistentStoreCoordinator:[self persistentStoreCoordinator]];
[threadDictionary setObject:context forKey:kManagedObjectContextKey];
[context setUndoManager:nil];
//to start observing context through DidSaveNotification.
[self startObserveContext:context];
}
}
return context;
}
而且没有显示出泄漏的仪器显示,当我只使用单/主NSManagedObjectContext.But它,因为内存的问题,同时处理大量的文件,所以我需要单独的NSManagedObjectContext为每个线程操作
任何一个可以告诉我,这将是对这个问题的一个好的解决方案?... 处理多个线程的核心数据方面的任何其他方法,将不胜感激..
谢谢
非常感谢你对你的想法@Marcelo,但问题是,即时通讯已经在我的项目完成了几乎所有的模块,我认为这似乎很难,如果我改变人对这些块..?......或者你可以发布你使用的方法? – Raj 2012-02-09 14:21:16
我检查了你给出的链接,他们引用了git hub MagicalRecord中的一个开源项目(http:// github。com/magicalpanda/magicalrecord),同样的事情(在线程字典中设置上下文),我们也可以在那里看到 – Raj 2012-02-10 05:13:17