在哪个线程上执行 Swift 属性的 didSet{}?



我在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上运行?

属性观察器willSetdidSet直接从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。。。

最新更新