fun*_*len 10 multithreading closures swift
我在Swift中定义了一个属性,如:
var foo : String {
didSet {
doSomething()
}
}
Run Code Online (Sandbox Code Playgroud)
因此,每次我设置foo就像foo = "bar"我didSet将被执行.
但是我无法找到正在执行的线程 didSet.
例如,在这种情况下会发生什么:
dispatch_async(some_queue, { () -> Void in
self.foo = "bar"
})
Run Code Online (Sandbox Code Playgroud)
这将导致didSet代码被执行.将didSet继续运行some_queue或始终运行main_queue?
Mar*_*n R 15
该物业观察家willSet和didSet被直接从setter方法中调用,之前/新的值存储之后,所以这一切都执行相同的线程上.
您可以通过设置断点didSet并检查堆栈回溯来验证它,如下所示:
* thread #2: tid = 0x4df3, 0x000000010024f9eb swtest2`swtest2.foo.didset : Swift.String(oldValue="foo") + 27 at main.swift:6, queue = 'myQueue', stop reason = breakpoint 1.1
* frame #0: 0x000000010024f9eb swtest2`swtest2.foo.didset : Swift.String(oldValue="foo") + 27 at main.swift:6
frame #1: 0x000000010024fb91 swtest2`swtest2.foo.setter : Swift.String(newValue="bar") + 177 at main.swift:4
frame #2: 0x000000010024fe3a swtest2`swtest2.(closure #1) + 42 at main.swift:13
...
| 归档时间: |
|
| 查看次数: |
1909 次 |
| 最近记录: |