NSOperation与完整块

我有一些image processing需要很多时间和资源,所以我使用NSOperation + NSOperatioQueue +委托为callBack。 和所有的工作。

现在我想要使用块,因为它在桌面视图中使用非常优雅和简单。

我需要做的只是像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]; 

在这个例子中,我没有看到任何操作Queue! 我怎么能这样做?

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

ImageManagerOperation是一个NSOperation。

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

我想尽量减less我的代码中的行号(如果可能:))。

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

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

通常情况下,您仍然可以将concurrent操作添加到NSOperationQueue因为您要利用队列提供的其他function,例如pipe理dependanciesmaxConcurrentOperationCount

所以你只需要创build一个NSOperationQueue并添加你的操作。 你不需要打电话start队列会为你做这个。