在iOS开发中,线程的创建与管理已经被Apple进行了很好的封装,但是在开发者实际开发中会滥用GCD,导致整个代码混乱不堪,因此在这里需要对iOS开发中的多线程开发进行整理。
1. 主线程完成耗时操作,会导致UI卡顿,因此耗时操作要以子线程的运行方式来运行
在iOS的Framework Controller中重载的与UI相关的方法都是在主线程中完成的,因此如果有需要从网络下载数据的方法,需要切换到子线程中进行,并且在数据下载完成后需要更新UI,这个时候又需要在主线程中更新UI
2.创建Thread方法
(1)pthread方法
pthread是操作系统C语言接口,非常底层,一般很少使用
pthread_t
pthread_create
(2)NSThread方法
NSThread是IOS框架封装的线程对象,需要自己管理线程的生命周期
一个线程一般分为:创建, 就绪, 运行,挂起,消亡
create ready running suspend dead
创建一个NSThread的方法:
NSThread *thread = [[NSThreadalloc] initWithTarget:selfselector:@selector(downLoad:)object:@"http://1.png"];
[thread start]
[NSThreaddetachNewThreadSelector:@selector(downLoad:)toTarget:selfwithObject:@"http://2.png"];
[self performSelector:@selector(downLoad:) onThread:[NSThread currentThread] withObject:@"http://3.png"waitUntilDone:NO];
[self performSelectorInBackground:@selector(downLoad:) withObject:@"http://3.png"];
(3)线程安全
线程安全 加锁-一定要对片段代码进行枷锁
@synchronized(self) {
}
(4)线程间的通信
在子线程中进行加载网络数据
在主线程中进行刷新UI
1. GCD
Dispatch_queue_t
Dispatch_get_global_queue
Dispatch_queue_create();
在主线程接受用户的输入事件
在线程执行耗时下载操作
然后再回到主线程中更新UI
默认主队列为串行执行
默认的全局队列为并行执行