一个线程将BOOL更改为YES,另一个线程看不到更改

时间:2010-09-20 09:02:46

标签: iphone objective-c multithreading ipad thread-safety

我有一个声明如下的属性:

@property(assign) BOOL die;

一个线程通过查看该变量是否已更改为YES来持续检查是否应该死亡。当该模具设置为YES(通过用户单击按钮)时,正在磨掉的另一个线程仍将其视为NO。我在代码中加入了仔细的跟踪,看到变量肯定没有显示为修改过。这是怎么回事?

每个线程是否包含自己的变量缓存?在我的母语Java中,我会在其上设置'volatile'关键字以删除属性上的本地线程缓存。

这是你可以在obj-c中做的事情,还是我在错误的轨道上?

2 个答案:

答案 0 :(得分:1)

不同的线程可能正在检查不同的实例。确保两个线程都访问该参数的同一副本

答案 1 :(得分:-3)

使用通知中心可能会更好,并且在更改时会通知侦听器。