在 Android 中,我可以安全地从不同的线程访问和修改原始类型。我用它在我的 OpenGL 绘制循环和在主线程 Android UI 中修改的用户设置之间共享数据。通过将每个设置存储在原始类型中并使每个设置独立于其他值,在不使用锁或 synchronize 关键字的情况下修改所有这些变量是线程安全的。
这在Objective-C中也是如此吗?我读到将 atomic 放在变量上实质上会导致合成的 getter 和 setter 使用锁,类似于在 Java 中使用同步方法。而且我已经读过,这样做的原因是对象在被另一个线程读取时不会被部分修改。
但是原始类型是否可以安全地被部分修改,就像它们在 Java 中一样?如果是这样的话,我似乎可以使用我在 Java 中的旧范式在线程之间共享数据。但是 atomic 关键字对于原语来说是没有意义的,对吗?
我还读到比使用原子变量更健壮和更快的解决方案是,如果从多个线程访问它们,则在使用它们之前复制对象。但我不确定如何做到这一点。非原子对象在被复制的过程中不能被修改,从而破坏副本吗?