我有一个iOS结构,可从基础类获取回调。此回调对NSMutablearray进行更改。
同时,我有一个NSTimer,它可以对方法进行回调,该方法可以对同一NSMutable数组进行更改。
如果回调“碰撞”了NSMutablearray,我在这里看到了一个潜在的问题。
我不确定该如何处理。NSLock可以解决问题,还是应该将NSMutablearray实例化为原子的?
您应该确保对可变数组的任何更改都发生在同一线程上。这将确保不存在“冲突”。如果您的计时器在主线程上触发,并且回调也在主线程上发生,那么一切都很好。
如果计时器和回调位于不同的线程上,则可以使用串行GCD队列来序列化对阵列的访问。执行此操作时,应在此队列上完成对该数组的任何和所有访问(例如,在属性中保留对该队列的引用)。
NSLock可能会对您有所帮助,但是如果您正在使用主线程,通常这不是一个好主意,因为您可能会阻塞主队列,这会影响用户交互/滚动行为。
同样,atomic仅表示获取或设置指向数组的指针是线程安全的,即:将返回或设置一个有效值(不过,dors并不意味着它将是正确的值)。您对其执行的任何操作都与属性atomic或nonatomox无关。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句