mer*_*ial 3 iphone core-data ios afnetworking
我在我的iPhone应用程序上遇到了间歇性的,难以重现的错误,因此我正在检查我对并发性的假设.
运行AFNetworking v0.10.x,我有以下网络呼叫:
[self postPath:@"/myEndPoint"
parameters:params
success:^(AFHTTPRequestOperation *request, id response)
{
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
// do stuff with object context here
[appDelegate.objectContext save];
}
]
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
// do other stuff with object context
[appDelegate.objectContext save];
Run Code Online (Sandbox Code Playgroud)
在我的AppDelegate中:
-(NSManagedObjectContext*) objectContext
{
if(nil == _objectContext)
{
... set up sqlite persistent store coordinator and object model ...
_objectContext = [[NSManagedObjectContext alloc] init];
[_objectContext setPersistentStoreCoordinator:persistentStoreCoordinator];
[_objectContext setMergePolicy:NSOverwriteMergePolicy];
}
return _objectContext;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,是否有可能最终出现并发问题?或者,换句话说,AFNetworking的API线程安全吗?我认为NSOverwriteMergePolicy会因冲突而覆盖我,但崩溃仍然存在(虽然是间歇性的).
AFNetworking的回调在主线程上执行.因此,它们是"线程安全的",因为只有一个线程与CoreData交互.如果您只有一个托管对象,那么事情就会很简单.
来自Apple:
添加到此队列的任务在主线程本身上串行执行.因此,您可以将此队列用作应用程序其他部分中正在完成的工作的同步点.
使用多线程CoreData和多个托管对象上下文时仍有许多注意事项,对于那些我引用rsswtmr的优秀答案,它没有正确回答我的问题,但提供了许多好信息的链接.
| 归档时间: |
|
| 查看次数: |
1907 次 |
| 最近记录: |