如何创建异步 NSOperation iOS?

How to create an asynchronous NSOperation iOS?

我已经研究了有关异步操作的 Apple 文档,但我无法正确获取它。

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

异步是只读的属性,我们无法更改它。 我创建了一个继承 NSOperation 的 class。我也有重写开始和主要方法。

我没有使用 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 在任何线程中总是 returns '0'。请告诉我这背后的原因。

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

如果你给我任何例子,我会正确地理解它,这将对我有所帮助。

如果我不够清楚,请告诉我,我应该再描述一下。

您混淆了 Grand Central Dispatch 和 NSOperation。

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

大多数情况下,只使用 Grand Central Dispatch 而根本不使用 NSOperation 会好得多。你使用 NSOperation 的地方是你需要它是可取消的。

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)}