我在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
上运行还是始终在create table flatower and add mobile column
$post_id = 1;
$sql = "select mobile from flatowner where id='$post_id'";
$res = mysql_query($con,$sql);
$row = mysql_fetch_array($res);
$owner_mobile = $row[0]['mobile'];
上运行?
答案 0 :(得分:13)
属性观察者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 ...