【问题标题】:How to create an asynchronous NSOperation iOS?如何创建异步 NSOperation iOS?
【发布时间】:2015-03-17 10:00:37
【问题描述】:

我研究了有关异步操作的 Apple 文档,但无法正确理解。

我正在分享我的理解和努力。请看一下并建议我正确理解异步 NSOperation。

异步是一个只读属性,我们无法更改它。 我创建了一个继承 NSOperation 的类。我也有覆盖 start 和 main 方法。

我没有使用 NSOperationQueue。当我使用 [operation start] 开始操作时;主线程上的方法。然后在 start 和 main 方法实现中,我得到 isAsynchronous '0'。

当我使用辅助线程开始操作时

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    operation = [[CustomOperation alloc] init];
    [operation start];
}

我在开始和主方法实现中仍然得到 isAsynchronous '0'。

我不明白为什么 isAsynchronous 总是在任何线程中返回“0”。请告诉我这背后的原因。

我看到有人根据这个问题提出了一些问题,但我无法理解这个功能。

如果你给我任何例子以便我能正确理解它会对我有帮助。

如果我不够清楚,请告诉我,我应该更多地描述它。

【问题讨论】:

    标签: ios asynchronous ios8 nsoperation nsoperationqueue


    【解决方案1】:

    您混淆了 Grand Central Dispatch 和 NSOperation。

    默认情况下,NSOperation 是同步的——当你启动它时,它会在当前线程上运行直到它完成。您正在后台线程上启动同步 NSOperation,因此它将在该后台线程上运行,直到完成。这完全没有问题。它在后台运行。它不称自己为“异步”,因为它不关心线程。

    在大多数情况下,您最好只使用 Grand Central Dispatch 而根本不使用 NSOperation。使用 NSOperation 的关键在于您需要将其取消。

    【讨论】:

    • 感谢您的回答。现在情况对我来说很清楚了。天气线程是主线程或用户创建的,操作正在同步启动。但是你能给我举一个“如何启动异步 NSOperation”的例子吗?或者“在什么情况下我会得到 NSOperation 的 isAsynchronous '1'”?
    • gnasher729:我仍在为 NSOperation 的 isAsynchronous '1' 条件而苦苦挣扎。我不知道,或者我不明白在什么情况下我会得到 NSOperation 的 isAsynchronous 为“1”。如果您可以为此提供示例,或者您可以给我一个链接以便我可以理解该功能,我将非常感谢您的帮助。
    • 您可以尝试创建 NSBlockOperation 并将异步代码放在块内。
    • 感谢大家的回答。我现在很清楚这个话题。我需要重写 isAsynchronous 方法并从那里返回 YES。它会使我的 NSOperation 异步。
    【解决方案2】:
    NSBlockOperation *operation_6 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"66666666666");
        NSLog(@"66==%@",[NSThread currentThread]);
    }];
    
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            [operation_6 start];
    });
    
    log:[7052:1932587] 66==<NSThread: 0x7fd18e73ef60>{number = 2, name = (null)}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 2010-12-08
      • 2012-09-19
      相关资源
      最近更新 更多