- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基本问题,关于NSOperationQueue addOperationsWithBlock
中的操作顺序。
我想做的事情:
[_queue addOperationWithBlock:^{
//starts a new thread to download an image
//returns a response from the server
if (returnResponse != nil) {
//what I need to accomplish:
//1) Update the collectionViewCell with data
//2) Cache the image locally
//3) Save the image name in local database
}
}];
我不需要代码来执行此操作,我只需要知道它是如何工作的。例如,如果我想立即为用户更新单元格,我是否应该像这样立即拥有那部分代码?
if (returnResponse != nil) {
[[NSOperationQueue mainQueue]addOperationWithBlock^{
//update the cell content on the main Thread
}];
//write data to file, save image name in local database
}
我的主要问题是:这样做,缓存图像和保存在本地数据库中是否会在那个单独的线程(用于下载图像的线程)上完成?如果我颠倒顺序(缓存图像,保存在本地数据库中,然后更新单元格),会有什么不同吗?
解决方案:
在尝试了许多不同的方法之后,我在 NSOperationQueue mainQueue
中使用了串行 GCD。尝试保存在 sqlite DB 中时,尽管我正确地完成并关闭了数据库,但一直给我一个 database is locked
错误。我想是因为它试图同时保存,让一个数据库同时打开,而另一个查询试图访问它。所以我的最终解决方案是这样的:
[_queue addOperationWithBlock:^{
//starts a new thread to download an image
//returns a response from the server
if (returnResponse != nil) {
//Cache the image locally
[[NSOperationQueue mainQueue]addOperationWithBlock^{
//use a created GCD serial queue to save the image name in local database
//update the cell content on the main Thread
}];
}
}];
最佳答案
为什么不将 GCD 与并发队列一起使用?您可以执行如下操作:
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//execute first
dispatch_sync(concurrentQueue, blockOfCode);
//execute second
dispatch_sync(concurrentQueue, blockOfCode);
//execute third: update the UI
dispatch_sync(dispatch_get_main_queue(), blockOfCodeToUpdateUI);
关于ios - NSOperationQueue addOperationWithBlock 返回mainQueue的操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25471726/
我在使用 addOperationWithBlock 时遇到了一些奇怪的结果。 我的函数看起来像这样: -(void) myFunction{ NSLog(@"VISITED"); ..
我有一个基本问题,关于NSOperationQueue addOperationsWithBlock 中的操作顺序。 我想做的事情: [_queue addOperationWithBlock:^{
我正在使用 NSOperationQueue 的 addOperationWithBlock。在 block 内,我如何检查我是否应该取消操作?或者访问任何 NSOperation 属性/方法? [m
这个问题在这里已经有了答案: Memory leak with "libBacktraceRecording.dylib" in React Native ios application (1 个
NSDate *dateStartAutoComplete = [NSDate date]; [[NSOperationQueue new]addOperationWithBlock:^{ N
事情是这样的,我得到了一些不执行的代码(编译器运行代码但不做任何事情)...这是代码...使用 NSURLSessionDelegate 和 [NSOperationQueue mainQueue]
我有一个包含 3 个步骤的流程。每一个都需要在另一个之前完成(同步、串行等)。所有这些都需要在后台完成,以免阻塞 UI。 我正在尝试重新设计一些东西以使用 2 个队列,一个用于网络操作,一个用于数据库
我读过很多文章都说“积木是 future !!!”。我想知道它是否与后台运行操作有关。 例如,我有一个表格 View ,其中包含来自网络的图像。现在我可以使用 +[NSOperationQueue a
我是一名优秀的程序员,十分优秀!