曾经面试时候被被问到最多的问题是 nonatomic是啥意思, 当时对这个东西理解有限,只是知道原子操作和非原子操作的区别。
OK, 其实这个东西是和多线程有关系的。
你在什么时候会用到多线程?理论我们都懂,但是用的好不好就看理解深不深了,大多时候我们会在download的时候用到这个东西,但是远远不是如此,用多线程还是为了提高性能和用户体验,对于iOS来说主线程用来刷新UI,所以如果我们要做一件耗时长的事情,同时不希望用户UI被block,我们几乎没有选择就是使用子线程(多线程)了,但是,这种情况其实不多。因为很耗时间的事情在iOS这种移动设备上最常见的就是webservice call,因为网络的问题我们需要等待,但是在这个级别上早就有各种优秀的算法和框架进行了优化,最常见的就是异步访问。
很早时候就知道多线程和异步,那个时候很不明白线程阻塞和同步到底有什么区别,现在明白了,区别就是多线程和单线程...阻塞说的是多个线程争抢一个资源,为了保证写数据不出乱子,只好让一个线程独占该数据,其他线程排队等着它,这个状态叫阻塞,而同步是跳出线程概念的一种机制,本质上说同步和异步可能也是通过使用多线程完成的,但是两者没有任何必然联系,甚至从逻辑上完全独立的,框架为我们实现了同步方法,那么这个方法在我们调用时没有返回结果前是绝对不会继续往下执行的,而异步方法就是说不让程序等着结果(其实也就是不阻塞当前线程,注意这里的阻塞的原因和行为与线程同步的阻塞完全不同,这里的阻塞是阻塞了当前执行的线程,而不是让其他线程阻塞等着自己)
我们经常使用异步用于webservice call,为的是在进行某个网络请求&