当NSTimer启动时会发生什么

托马斯·博克(ThomasBødker)

我有一个iOS结构,可从基础类获取回调。此回调对NSMutablearray进行更改。

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

如果回调“碰撞”了NSMutablearray,我在这里看到了一个潜在的问题。

我不确定该如何处理。NSLock可以解决问题,还是应该将NSMutablearray实例化为原子的?

约里德

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

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

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

同样,atomic仅表示获取或设置指向数组的指针是线程安全的,即:将返回或设置一个有效值(不过,dors并不意味着它将是正确的值)。您对其执行的任何操作都与属性atomic或nonatomox无关。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ubuntu反复关闭并重新启动时会发生什么?

来自分类Dev

启动计算机时会发生什么?

来自分类Dev

使用/ noguiboot参数启动系统时会发生什么?

来自分类Dev

暂停时会发生什么?

来自分类Dev

从关机启动时,有时会发生Windows 10蓝屏错误

来自分类Dev

未指定dbCreate时会发生什么?

来自分类Dev

升级Ubuntu时会发生什么?

来自分类Dev

单击提交按钮时会发生什么

来自分类Dev

循环结束时会发生什么?

来自分类Dev

合成子类的变量时会发生什么?

来自分类Dev

达到墓碑限制时会发生什么

来自分类Dev

VRAM已满时会发生什么?

来自分类Dev

当指针太大时会发生什么?

来自分类Dev

断言检查失败时会发生什么?

来自分类Dev

定义函数时会发生什么?

来自分类Dev

升级Ubuntu时会发生什么?

来自分类Dev

达到墓碑限制时会发生什么

来自分类Dev

PHP cookie过期时会发生什么?

来自分类Dev

碳粉过多时会发生什么?

来自分类Dev

验证分离的签名时会发生什么?

来自分类Dev

在/上安装分区时会发生什么?

来自分类Dev

当您用尽PID时会发生什么?

来自分类Dev

时间结束时会发生什么?

来自分类Dev

在/上安装分区时会发生什么?

来自分类Dev

当TransactionScope超时时会发生什么

来自分类Dev

当 AsyncTasks 满时会发生什么?

来自分类Dev

服务在调用stopSelf()后收到启动命令时会发生什么情况

来自分类Dev

当kubernetes重新启动容器或扩展集群时会发生什么?

来自分类Dev

当我们停止并启动ec2实例AWS时会发生什么