10.7 多线程 NSThread 同步, 异步

多线程的三大类API

NSThread,NSOperationQueue,GCD

多线程本身不是好理解,光是思想就不简单
timeSlice 每个任务都有时间片
N个线程间的通信,就是多线程
不可重入函数:在执行的时候别的函数不可以进来
比如a++,第一个线程执行到一半,另一个线程又来加一次,就变成加了两次了,结果可能就不一样了
可重入函数则反之

NSThread
[NSThread detachNewThreadSelector:@selector(demoFunc) toTarget:selfwithObject:nil]
示例:Button不用等下载完就有响应
- (IBAction)buttonClicked:(UIButton *)sender {

    //用一个新的线程去执行demoFunc4的下载,Button点下去,不用等下载好就有响应。
    [NSThread detachNewThreadSelector:@selector(demoFunc4) toTarget:selfwithObject:nil];
   
}

-(void)demoFunc4{

    //下载图片
    NSData *data = [NSData dataWithContentsOfURL:[NSURLURLWithString:@"http://www.3337973.cc/imgall/mjuxu2djfy2diojtfzrw63i/uploads/allimg/140828/3-140RQ34K1.jpg"]];

    //显示图片
    __image.image = [UIImage imageWithData:data];
    
}

主线程只有一个,子线程有多个。几核的CPU和有多少子线程是没关系的。
同步执行:等A执行完才执行B 说的是这个函数
异步执行:不用等A执行完就执行B。 如果里面有3个方法,只要有一个异步方法,3个都会被传染成异步方法

为了保证流畅,主线程能少做事情就少做,但是有些是避免不了的,比如说UI基本都是用主线程来执行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案...
    伯恩的遗产阅读 274,895评论 251 2,331
  • Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么? 1...
    AlanGe阅读 1,793评论 0 17
  • 一.资源抢夺 2> 资源抢夺解决方案 @sychronized{ } dispatch_barrier_async...
    蓝心儿的蓝色之旅阅读 1,399评论 0 4
  • NSThread 第一种:通过NSThread的对象方法 NSThread *thread = [[NSThrea...
    攻城狮GG阅读 854评论 0 3
  • 小时候总觉得自己的名字不好听心心念念的要换一个。后来,小伙伴根据我的名字给我取了一个害虫类的外号,让我更坚...
    尼开阅读 278评论 0 0