首页 前端 ios 正文

ios多线程

long 2020-09-02 10:19 ios 人气89

使用GCD管理/操作线程,内部用线程池管理线程

概念:

任务:就是要执行的操作

队列:用来存放任务

处理流程,

1、创建任务

2、把任务放到队列里。

3、GCD自动从队列里取出任务,放到对应的线程中执行,取出原则FIFO。

同步方法

dispatch_sync(dispatch_queue_t queue, ^(void)block)  

异步方法

dispatch_async(dispatch_queue_t queue, ^(void)block) 

例子:

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

dispatch_block_t task = ^{

    NSLog(@"hello%@", [NSThread currentThread]);

};

dispatch_async(queue, task);


开启异步执行,下载网络图片

dispatch_async(dispatch_get_global_queue(0,0),^{

    NSURL*url=[NSLRL URLWithstring:@""];

    NSData *data = [NSData datawithContentsOfURL:url];

    UIImage *img = [UIImage imageWithData:data];

    //回到主线程更新UI

    dispatch_sync(dispatch_get_main_queue(), ^{

        self.imageVieiv.image = img;

        [self.imageView sizeToFit];

        self.scrollView.contentSize = img.size;

    });

});

需要在info.plist里增加请求网络权限

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>

        <true/>

    </dict>


同步,异步决定了是否开新的线程

同步:在当前线程中执行任务,不开新线程

异步:在新线程中执行任务,可以开新线程


并发/串行

并发:多个任务并发执行

串行:一个任务执行完毕,再执行下一个任务。

评论
  • 消灭零回复
公众号
小程序
网站统计
  • 文章总数:249
  • 总点击量:35160
  • 评论总数:27
  • 网站运行:446 天