iOS多线程理解

来源:互联网 发布:云服务器 8000 端口 编辑:程序博客网 时间:2024/05/22 10:05

   在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

默认主队列为串行执行

默认的全局队列为并行执行


  


       

1 0
原创粉丝点击