当NSTimer开始时会发生什么

时间:2016-04-27 11:11:17

标签: ios nstimer

我有一个iOS构造,我从底层类获得回调。 此回调会更改NSMutablearray。

同时我有一个NSTimer,它对一个对同一个NSMutable数组进行更改的方法进行回调。

如果回调"碰撞"我在这里看到一个潜在的问题使用NSMutablearray。

我不知道如何处理这件事。 NSLock可以做到这一点,还是应该将NSMutablearray实例化为原子?

1 个答案:

答案 0 :(得分:2)

您应该确保对可变数组的任何更改都发生在同一个线程上。这将确保不会发生“碰撞”。如果您的计时器在主线程上触发,并且您的回调也发生在主线程上,那么一切都很好。

如果计时器和回调位于不同的线程上,则可以使用串行GCD队列序列化对阵列的访问。执行此操作时,应对此队列执行对此数组的任何和所有访问(例如,在属性中保留对此队列的引用)。

NSLock可能会对您有所帮助,但是如果您正在使用主线程,这通常不是一个好主意,因为您可能会阻止主用户,这会影响用户交互/滚动行为。

此外,atomic仅意味着获取或设置指向数组的指针是线程安全的,即:将返回或设置有效值(dors并不意味着它将是正确虽然值)。你对它做的任何操作都与属性或非原子的属性无关。

相关问题