【问题标题】:NSOperation with completition block带有完成块的 NSOperation
【发布时间】:2013-03-15 15:15:28
【问题描述】:

我有一些图像处理需要花费大量时间和资源,所以我使用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。

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

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

【问题讨论】:

    标签: ios optimization objective-c-blocks nsoperation nsoperationqueue


    【解决方案1】:

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

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

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

    所以只需为自己创建一个NSOperationQueue 并将您的操作添加到其中。您无需致电start,队列会为您完成此操作。

    【讨论】:

    • 谢谢,所以最后我必须创建自己的队列,这对于 tableView 来说会很费力,所以我用 GCD 来做,效果很好,我真的
    • 谢谢,所以最后我必须创建自己的队列,为 tableView 调整它会很费力,所以我用 GCD 做这件事,效果很好(我认为 GCD 使用操作对 ?)。你回答了我的问题,所以我接受它谢谢你:)
    • 不,NSOperation 使用 GCD 而不是相反。听起来您需要一个队列,这样您就可以限制您在表格视图中所做的工作量。我假设您在滚动时正在为每个单元格工作?如果有人滚动很多,你可能会开始太多的工作。使用队列有助于限制这一点,还可以让您取消可能已为单元启动但不再需要的任务,因为用户已滚动离开。有一个 WWDC(我认为是 2012 年)会议对此进行了深入讨论。如果你也在做这件事,你应该看看这个视频。
    • 是的,这正是我正在做的事情,我在 'willdisplaycell' 方法中调用了 'GCD' 块,但我认为你是对的,我必须优化我的原因,因为应用程序将一个消息应用程序,因此可以显示分配的单元格谢谢,我将使用客户帐户访问此视频会话:) 谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多