Так что я знаю, что NSManagedObjects
не являются потокобезопасными, и лучший способ получить объекты из фонового потока - использовать [context objectWithId:id];
и, таким образом, передавать идентификаторы объектов вместо фактического объекта.Доступ к NSManagedObject из фонового потока
Скажем, у меня есть в моем AppDelegate
глобальную NSManagedObject
(не лучший шаблон дизайна, но только для примера) NSManagedObject *myObject;
Безопасно для доступа этого объекта objectId
из фонового потока? Как это:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
objectId = appDelegate.myObject.objectId;
//is this thread safe?
}
Я согласен с вашим решением, но мне нужно понять что-то, objectID для NSManagedObject является неизменяемым свойством (после первого сохранения). разве безопасно ли доступ к неизменяемому свойству из любого потока? – PushpRaj
@PushpRaj В целом, свойство быть неизменным не гарантирует безопасность потока. Для NSManagedObject документация достаточно ясна, что вы не должны передавать NSManagedObjects из одного потока в другой, что и делает код примера (независимо от того, какие свойства вы хотите получить). Вы правы, что детали реализации * вероятно * означают, что безопасно получить доступ к объекту ID из фонового потока, но это, безусловно, не гарантируется. –