gpt4 book ai didi

ios - 带有完成 block 的 NSOperation

转载 作者:行者123 更新时间:2023-11-29 13:17:11 24 4
gpt4 key购买 nike

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

现在我想使用 block ,因为它在 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];

在这个例子中我没有看到任何操作队列!我怎样才能做同样的事情?

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

其中 ImageManagerOperation 是一个 NSOperation。

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

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

最佳答案

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

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

通常您仍会向 NSOperationQueue 添加并发 操作,因为您想要利用队列提供的其他功能,例如管理依赖项maxConcurrentOperationCount

因此,只需为自己创建一个 NSOperationQueue 并将您的操作添加到其中。你不需要调用 start 队列会为你做这件事。

关于ios - 带有完成 block 的 NSOperation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15435920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com