【发布时间】:2016-07-12 08:56:28
【问题描述】:
我目前正在验证我们在多线程环境中使用的新 CoreData 架构。为了进行分析,我使用GDCoreDataConcurrencyDebugging 打印警告,每次从错误的线程/队列访问 ManagedObject(据我所知)。
现在我收到大量这样的警告:
Invalid concurrent access to managed object calling 'release'
我能够在生成警告的地方放置一个断点,代码如下所示:
-(MyObject*) createMyObject {
return (MyObject*)[self insertNewObjectEntityWithName:@"MyObject"];
}
-(NSManagedObject*) insertNewObjectEntityWithName:(NSString*) entityName {
__block NSManagedObject *managedObject;
[self.managedObjectContext performBlockAndWait:^(void) {
managedObject = [NSEntityDescription insertNewObjectForEntityForName:entityName
inManagedObjectContext:self.managedObjectContext];
}];
return managedObject;
}
它在返回后打破了createMyObject-method,我猜这是在释放对象时。 CoreData-concurrency 和 object-release 有什么特别之处吗?
我环顾四周,没有提到任何关于对象释放的内容,只有关于我没有使用的自动释放池。
【问题讨论】:
标签: ios objective-c multithreading core-data concurrency