多线程
2016-05-18 本文已影响28人
shenhaieyu
同步锁,又叫互斥锁,@synchronized(self)
自旋锁:atomic:原子属性,多线程环境下,只有一个线程可以对它赋值,读取没有线程限制
nonatomic:非原子属性,读取没有限制
线程安全:在多个线程进行读写操作时,仍然能够保证数据的正确
几乎所有的UIKit类都是非线程安全的
所有的mutable开头的类都不是线程安全的
weak:弱引用,如果对象销毁,会指向0x0地址
assign:基本数据类型,如果使用assign指针指向对象,对象释放时,会指向原来对象的地址,发生野指针错误。
消息循环:循环开始,创建对象,创建自动释放池,执行事件,倾倒自动释放池,一次循环结束。
线程上运行着消息循环,根据消息的不同会有不同的处理方法。
消息循环包含输入源和定时源。输入源包含键盘、鼠标、NSPort等等。
消息循环的默认模式是KCFRunLoopDefaultMode,当拖动界面的时候,模式变成UITrackingRunLoopMode。添加定时器的时候,会有一个模式。
只有当定时器的模式和消息循环的模式匹配的时候,定时器才能运行在消息循环中。
定时器的NSRunLoopCommonModes是一个模式集合。
同步异步:是否开启新线程
并发串行:队列中任务是同时执行还是串行执行
主队列同步:死锁
主队列异步:不开启新线程,串行执行任务
串行队列同步:不开启新线程,串行执行任务
串行队列异步:开启一个新线程,串行执行任务
并发队列同步:不开启新线程,串行执行任务
并发队列异步:开启多个新线程,并发执行任务