【发布时间】:2018-05-15 07:05:25
【问题描述】:
使用 NSMainQueueConcurrencyType 和 NSPrivateQueueConcurrencyType 初始化的托管对象上下文与主队列和私有队列相关联,它们是串行队列,操作按 FIFO 顺序执行。
下面的示例代码:
NSLog(@"Current thread : %@", [NSThread currentThread]);
[mainMoc performBlock:^{
NSLog(@"main 1 - %@", [NSThread currentThread]);
}];
[mainMoc performBlockAndWait:^{
NSLog(@"main 2 - %@", [NSThread currentThread]);
}];
[mainMoc performBlock:^{
NSLog(@"main 3 - %@", [NSThread currentThread]);
}];
[bgMoc performBlock:^{
NSLog(@"bg 1 - %@", [NSThread currentThread]);
}];
[bgMoc performBlockAndWait:^{
NSLog(@"bg 2 - %@", [NSThread currentThread]);
}];
[bgMoc performBlock:^{
NSLog(@"bg 3 - %@", [NSThread currentThread]);
}];
我期待它打印出来
main 1、main 2 和 main 3 像 bg 1、bg 2 和 bg 3 按顺序排列,但这是打印出来的:
Current thread : <NSThread: 0x60000006fb80>{number = 1, name = main}
main 2 - <NSThread: 0x60000006fb80>{number = 1, name = main}
bg 1 - <NSThread: 0x600000268900>{number = 3, name = (null)}
bg 2 - <NSThread: 0x60000006fb80>{number = 1, name = main}
bg 3 - <NSThread: 0x600000268900>{number = 3, name = (null)}
main 1 - <NSThread: 0x60000006fb80>{number = 1, name = main}
main 3 - <NSThread: 0x60000006fb80>{number = 1, name = main}
考虑到主队列和私有队列都是串行的,它背后的理论是什么?
【问题讨论】:
标签: ios objective-c core-data concurrency