iOS多线程理解

   在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

默认主队列为串行执行

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


  


       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值