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理dependancies
和maxConcurrentOperationCount
。
所以你只需要创build一个NSOperationQueue
并添加你的操作。 你不需要打电话start
队列会为你做这个。