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

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

作者: 小码僧 | 来源:发表于2018-06-29 15:26 被阅读150次
    1. 想在主线程执行setImage怎么办?

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

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

    - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
    

    其中 waitUntilDone 后面的BOOL参数。

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

    思路2:利用 线程间通信

    // 回到主线程
            dispatch_async(mainQueue, ^{
                // 追加在主线程中执行的任务
                [NSThread sleepForTimeInterval:2];              // 模拟耗时操作
                NSLog(@"2---%@",[NSThread currentThread]);      // 打印当前线程
                self.imgView.image = theImage;
            });
    
    2. 如何通过 performSelector 传入多参数
    • 方法一: 利用数组
      把参数放进一个数组/字典,直接把数组/字典当成一个参数传过去,具体方法实现的地方再解析这个数组/字典
    NSArray * array = 
        [NSArray arrayWithObjects: @"first", @"second", nil];
    [self performSelector:@selector(fooFirstInput:) withObject: array afterDelay:15.0];
    
    • 方法二: 使用NSInvocation
    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. 两种常见队列
    • 主队列的获取方法
    dispatch_queue_t queue = dispatch_get_main_queue();
    
    • 全局并发队列的获取方法
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/lteayftx.html