前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS线程相关·零散知识点集合计划(更新中)

iOS线程相关·零散知识点集合计划(更新中)

作者头像
陈满iOS
发布2018-09-10 11:24:20
2710
发布2018-09-10 11:24:20
举报
文章被收录于专栏:陈满iOS陈满iOS
1. 想在主线程执行setImage怎么办?

思路1:采用 performSelector 相关的API:

这么多API,可以采用一个适合的,例如:

代码语言:javascript
复制
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

其中 waitUntilDone 后面的BOOL参数。

  • 当为YES的时候,先让主线程运行aSelector中的一些操作,之后再进行当前线程中的操作。
  • 当为NO的时候,先进行当前线程中的操作,之后让主线程运行aSelector中的一些操作。

思路2:利用 线程间通信

代码语言:javascript
复制
// 回到主线程
        dispatch_async(mainQueue, ^{
            // 追加在主线程中执行的任务
            [NSThread sleepForTimeInterval:2];              // 模拟耗时操作
            NSLog(@"2---%@",[NSThread currentThread]);      // 打印当前线程
            self.imgView.image = theImage;
        });
2. 如何通过 performSelector 传入多参数
  • 方法一: 利用数组 把参数放进一个数组/字典,直接把数组/字典当成一个参数传过去,具体方法实现的地方再解析这个数组/字典
代码语言:javascript
复制
NSArray * array = 
    [NSArray arrayWithObjects: @"first", @"second", nil];
[self performSelector:@selector(fooFirstInput:) withObject: array afterDelay:15.0];
  • 方法二: 使用NSInvocation
代码语言:javascript
复制
SEL aSelector = NSSelectorFromString(@"doSoming:argument2:");
NSInteger argument1 = 10;
NSString *argument2 = @"argument2";
if([self respondsToSelector:aSelector]) {
    NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:aSelector]];
    [inv setSelector:aSelector];
    [inv setTarget:self];
    [inv setArgument:&(argument1) atIndex:2];
    [inv setArgument:&(argument2) atIndex:3];
    [inv performSelector:@selector(invoke) withObject:nil afterDelay:15.0];
}
3. GCD的四种组合比较总结
  • 关于操作队列的比较

操作队列

区别

串行队列

顺序执行

并行队列

不顺序执行

  • 关于执行方式的比较

执行方式

区别

同步执行

同步执行意味着不开线程

异步执行

异步执行意味着要开线程

  • 关于组合的总结:是否开新线程的

执行方式 \ 操作队列

串行队列

并行队列

同步

不开新线程

不开新线程

异步

开一个新线程

开几个新线程

4. 两种常见队列
  • 主队列的获取方法
代码语言:javascript
复制
dispatch_queue_t queue = dispatch_get_main_queue();
  • 全局并发队列的获取方法
代码语言:javascript
复制
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.06.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 想在主线程执行setImage怎么办?
  • 2. 如何通过 performSelector 传入多参数
  • 3. GCD的四种组合比较总结
  • 4. 两种常见队列
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档