美文网首页
听说资深iOS工程师,可解释这个多线程(集合)

听说资深iOS工程师,可解释这个多线程(集合)

作者: 小小小蚍蜉 | 来源:发表于2018-10-12 16:53 被阅读45次

    dispatch_async操作与performSelector的简单比较:

    直接附代码,copy代码进行打印比较吧,这是

    ''' swift

    - (void)viewDidLoad {

        [super viewDidLoad];

        NSLog(@"2");

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

            NSLog(@"7");

        });

        /**

         当为true时阻塞当前主线程,直接调用,当为false,会将selector方法添加到主线程的任务队列中,执行优先级高于performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;

         低于dispatch_async到的主线程的操作

         */

        [self performSelectorOnMainThread:@selector(test5) withObject:nil waitUntilDone:true];

        /*

         只是把操作当前线程队列中,如果当前线程是主线程,优先级低于当前方法中通过dispatch_async到主线程的任务;

         此方法异步操作只能在主线程工作,子线程中是不工作的,因为PerformSelecter方法

            当调用 NSObject 的 performSelecter:afterDelay: 后,实际上其内部会创建一个 Timer 并添加到当前线程的 RunLoop 中。所以如果当前线程没有 RunLoop,则这个方法会失效。

            当调用 performSelector:onThread: 时,实际上其会创建一个 Timer 加到对应的线程去,同样的,如果对应线程没有 RunLoop 该方法也会失效。

         */

        [self performSelector:@selector(test4) withObject:nil afterDelay:0];

       dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    //        [self performSelector:@selector(test5) withObject:nil afterDelay:0];不会执行

            /**

             在子线程调用时,1:当是true时会阻挡当前线程,直到执行完毕,其后的方法才可以执行;

                        2:当是false时,执行优先级高于performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;

             低于dispatch_async到的主线程的操作

             */

            [self performSelectorOnMainThread:@selector(test5) withObject:nil waitUntilDone:false];

            NSLog(@"6");

        });

        [selfperformSelector:@selector(test1)];

        dispatch_async(dispatch_get_main_queue(), ^{

            NSLog(@"8");

        });

        NSLog(@"3");

    }

    '''

    打印的顺序答案:

    '''

     2->5->1-> 6-> 3-> 7-> 8->5-> 4

    '''

    相关文章

      网友评论

          本文标题:听说资深iOS工程师,可解释这个多线程(集合)

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