我在Swift中定义了一个类似于的属性
var foo : String {
didSet {
doSomething()
}
}
所以每次我像foo = "bar"
一样设置foo
时,我的didSet
都会被执行。
但是,我找不到在哪个线程上执行didSet
。
例如,在这种情况下会发生什么:
dispatch_async(some_queue, { () -> Void in
self.foo = "bar"
})
这将导致执行didSet
代码。didSet
是在some_queue
上运行还是始终在main_queue
上运行?
属性观察器willSet
和didSet
直接从setter方法中调用,立即在存储新值之前/之后,所以所有这些都在同一个线程上执行。
您可以通过在didSet
中设置断点并检查堆栈回溯,看起来像这样:
*线程#2:tid=0x4df3,0x000000010024f9eb swtest2` swtest2.foo.didset:Swift。字符串(oldValue="foo")+27,位于main。swift:6,queue='myQueue',停止原因=断点1.1*帧#0:0x00000010024f9eb swtest2` swtest2.foo.didset:Swift。字符串(oldValue="foo")+27在main。swift:6帧#1:0x00000010024fb91 swtest2` swtest2.foo.setter:Swift。字符串(newValue="bar")+177在main。swift:4帧#2:0x000000010024fe3a swtest2` swtest2.(闭包#1)+42在main。swift:13。。。