MST

星途 面试题库

面试题:Objective-C中属性内存管理特性之nonatomic与atomic

在Objective-C中,属性的nonatomic和atomic特性有什么区别?分别在什么场景下使用?
31.4万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

区别

  1. atomic
    • atomic 是默认的属性特质。它会为属性的 setter 和 getter 方法添加锁,以确保同一时间只有一个线程能够访问属性,从而保证了多线程环境下属性访问的线程安全性。
    • 这种线程安全是通过锁机制实现的,每次访问属性时都要进行加锁和解锁操作,这会带来一定的性能开销。
  2. nonatomic
    • nonatomic 表示非原子性,它不会为属性的 setter 和 getter 方法添加锁。
    • 这意味着在多线程环境下,不同线程可能同时访问和修改该属性,存在数据竞争的风险,但由于没有锁的开销,其性能相对 atomic 更好。

使用场景

  1. atomic
    • 当属性的值在多线程环境下频繁被读写,并且需要保证数据一致性和完整性时,使用 atomic。例如,在多线程同时读写共享数据的场景,如多线程操作数据库连接对象的某些属性时,为了防止数据不一致,可以使用 atomic。
  2. nonatomic
    • 在性能要求较高且不存在多线程竞争访问风险的场景下,使用 nonatomic。例如,在单例类中,因为单例在应用中只有一个实例,不存在多线程访问的竞争问题,其属性可以使用 nonatomic 以提高性能。另外,在一些只在主线程中访问的属性,也可以使用 nonatomic 来提升性能。