- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个包含 3 个步骤的流程。每一个都需要在另一个之前完成(同步、串行等)。所有这些都需要在后台完成,以免阻塞 UI。
我正在尝试重新设计一些东西以使用 2 个队列,一个用于网络操作,一个用于数据库更新以保护核心数据。在队列之间来回跳动,我可以让事情串行化,只需触发一个 block ,然后在它完成时调用它。
我正在使用 addOperationWithBlock 来创建操作并将其入队,但没有看到执行完成 block 的明显方法(例如我使用 setCompletionBlock 所做的)。完成后我不确定如何开始第 2 步。我是不是想太多了,我只是在第 1 步的 block 末尾调用下一个方法(第 2 步的起点)?问题是这些 block 内的东西可能像 AFNetworking 调用一样异步。
这里有一些代码和更多信息。我想访问服务器,获取数据,然后在完成时执行其他操作,但将它们链接起来,因此它必须按顺序从数据到验证步骤:
self.networkQueue = [NSOperationQueue new];
self.networkQueue.maxConcurrentOperationCount = 1;
self.databaseQueue = [NSOperationQueue new];
self.databaseQueue.maxConcurrentOperationCount = 1;
[self.networkQueue addOperationWithBlock:^{
NSString *listURL = [NSString stringWithFormat:GET_LIST,BASE_URL];
NSURL *url = [NSURL URLWithString:briefListURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest: request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
self.list = [NSArray arrayWithArray:(NSArray *)JSON];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
[self listOperationDidFail];
}];
// define block that will execute when the task is finished
[operation setCompletionBlock:^{
// Latest data retrieved. Check if db needs updating
[self verifyList];
}];
[operation start];
}];
最佳答案
这里真正的问题是队列中 block 的完成 block 中的异步过程。
这个食谱应该有帮助:
创建 NSOperationQueue 实例。设置 maxConcurrentOperationCount = 1。
声明所有 block 进程及其完成 block 。放在那里任何你想要的东西。在每个 block 进程的开始,放置一段暂停创建的 NSOperationQueue 的代码。在每个 block 的完成 block 的末尾,放置一段取消挂起相同队列的代码 - 如果您在 block 或其完成 block 内调用异步进程,则需要在该异步进程的末尾放置/调用该取消挂起代码。
将所有 block 添加到 NSOperationQueue。
您还可以通过将每个进程嵌套在其他进程完成 block 中来完成工作。
关于iphone - 使用 addOperationWithBlock 将 block 添加到队列并使用完成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18837849/
我在使用 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
我是一名优秀的程序员,十分优秀!