1

我有一些图像处理需要很多时间和资源,所以我使用NSOperation++NSOperatioQueue委托进行回调。和所有的工作。

现在我想使用块,因为它非常优雅且易于在 tableView 中使用。

我需要做的就是AFJSONRequestOperation例如:

NSURL *url = [NSURL URLWithString:@"url"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"App.net Global Stream: %@", JSON);
 } failure:nil];
[operation start];

在这个例子中我没有看到任何 operationQueue !我该怎么做?

    [ImageManagerOperation modifyImage:(UIImage*)image completitionBlock:(void (^)(UIImage *modifiedImage))complete];

其中 ImageManagerOperation 是一个 NSOperation。

我知道我可以设置一个完成块,但我仍然需要将操作添加到队列中。

我想最小化我的代码中的行号(如果可能的话:))。

4

1 回答 1

1

通常,an 中的代码NSOperation是同步的。NSOperationQueue提供在后台运行代码所需的线程。因此,您将操作添加到队列中,然后队列start在后台线程上调用您的操作。

AFJSONRequestOperationNSOperation是被调用的一种特殊类型concurrent,这意味着该操作已经在内部提供了它自己的后台线程。在某些情况下,您可以在队列之外调用操作的start方法。concurrent因为该操作已经提供了它自己的后台线程,所以它仍然会在后台运行。在这种情况下start,可能会直接调用以最小化示例中显示的代码。

通常,您仍然会concurrent向 an 添加操作,NSOperationQueue因为您想利用队列提供的其他功能,例如管理dependanciesmaxConcurrentOperationCount.

因此,只需创建自己NSOperationQueue并添加您的操作即可。您不需要调用start队列会为您执行此操作。

于 2013-03-16T14:02:22.140 回答