gpt4 book ai didi

ios - CoreData并发和释放对象

转载 作者:行者123 更新时间:2023-11-28 21:25:28 26 4
gpt4 key购买 nike

我目前正在验证我们在多线程环境中使用的新 CoreData 架构。为了分析,我正在使用 GDCoreDataConcurrencyDebugging每次从错误的线程/队列访问 ManagedObject 时都会打印警告(据我所知)。

现在我收到大量这样的警告:

对调用“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 方法,我猜这是在释放对象时。 CoreData-concurrency 和 object-release 有什么我错过的特别之处吗?我环顾四周,没有提到任何关于对象释放的内容,只提到了我没有使用的自动释放池。

最佳答案

您正在 performBlockAndWait: 调用中执行工作,这是正确的。但是,您继续返回该对象,大概是从另一个线程返回的。那是不合法的。所有托管对象都必须从创建它们的线程/队列访问,objectID 属性除外,它始终有效。

关于ios - CoreData并发和释放对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38324196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com