当前位置:  开发笔记 > IOS > 正文

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

如何解决《在哪个线程上执行Swift属性的didSet{}?》经验,为你挑选了1个好方法。

我在Swift中定义了一个属性,如:

var foo : String {
  didSet {
    doSomething()
  }
}

因此,每次我设置foo就像foo = "bar"didSet将被执行.

但是我无法找到正在执行的线程 didSet.

例如,在这种情况下会发生什么:

dispatch_async(some_queue, { () -> Void in
     self.foo = "bar"
})

这将导致didSet代码被执行.将didSet继续运行some_queue或始终运行main_queue



1> Martin R..:

该物业观察家willSetdidSet直接从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
    ...

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有