如何创建异步 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)}
我已经研究了有关异步操作的 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)}