我在我的 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];
在我的 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;
}
在这种情况下,是否有可能最终出现并发问题?或者,换句话说,AFNetworking 的 API 是线程安全的吗?我认为 NSOverwriteMergePolicy 会覆盖我的冲突,但崩溃仍然存在(尽管是间歇性的)。