文章目录
前言
不知道写啥 我看大佬都写前言 随便挂一下
听说这个面试必问啊 得好好看好好学
先赞后看 已成习惯
原子性
原子性主要是两个关键字
- atomic
- nonatomic
atomic和nonatomic
- 翻译就是原子的 是默认的原子操作关键字 atomic也就代表其具有原子性
- atomic属性关键字会给该property的getter方法跟setter方法加锁 但不能保证线程一定安全并且会带来更多损耗
- atomic意味着只有一个线程访问变量(静态类型) 线程安全 这里指的是读写线程的安全
- atomic执行性能比较低
- atomic是默认的
- nonatomic就是非原子性的 不会给getter方法跟setter方法加锁 这是一般我们默认的方法
- nonatomic意味着多线程访问变量(动态类型) 线程不安全 这里指的是读写线程安全
- nonatomic执行性能较高
- nonatomic不是默认的 我们需要自己加
在默认情况下 由编译器所合成的方法会通过锁定机制确保其原子性 如果属性具备
nonatomic
特质 则不使用同步锁. 尽管没有名为atomic
的特质 但是如果某属性不具备nonatomic
特质 那它就是原子的 但是仍然可以在属性特质中写明这一点 编译器不会保错 若它是自己定义存取方法 那么就应该遵守与属性特质相符的原子性
两种锁–自旋锁和互斥锁
自旋锁
- 用来标记只能有一个线程访问对象 在同一线程