由于
答案 0 :(得分:8)
NSUserDefaults
类是线程安全的,请参阅documentation。所以是的,里面可能存在某种锁定机制。
答案 1 :(得分:4)
如果2个线程在没有某种锁定原语的情况下写入同一个对象或结构,则会发生非常糟糕的事情。充其量,你最终会有不一致的状态。最糟糕的是,你的应用程序会崩溃。 NSUserDefaults被定义为线程安全的,所以 - 是的 - 它正在使用某种类型的锁定。
如果您在不同的线程中运行的视图都写入同一个对象,则表明存在完全不同的问题。 UIKit不是完全线程安全的。大多数UI交互必须从主线程完成。
文档上有bunch of information。