美文网首页
iOS 多线程面试题的输出类型考点

iOS 多线程面试题的输出类型考点

作者: zaijianbali | 来源:发表于2022-08-09 16:20 被阅读0次
    - (void)test {
        //并发队列
        dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
        
        for (int i = 0; i < 1000; i++) {
            //超过数据线程总数,线程爆炸
            dispatch_async(queue, ^{
                self.name = [NSString stringWithFormat:@"abcdefghijk_%d",i];
            });
        }
        NSLog(@"name : %@",self.name);
    }
    //输出结果:crash,async 的异步线程,需要不断开辟线程。iOS的最大线程总数不到100个,所以1000个的时候,导致线程爆炸
    
    - (void)test1 {
        NSLog(@"执行任务1");
        
        dispatch_queue_t queue = dispatch_queue_create("myqueu", DISPATCH_QUEUE_SERIAL);
        dispatch_async(queue, ^{ // 0
            NSLog(@"执行任务2");
            //相当于主线程调用了dispatch_sync(main)
            dispatch_sync(queue, ^{ // 1
                NSLog(@"执行任务3");
            });
            
            NSLog(@"执行任务4");
        });
        
        NSLog(@"执行任务5");
    }
    //输出:152 然后死锁了
    
    - (void)test2
    {
        dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
        
        dispatch_async(queue, ^{
            NSLog(@"1");
            //没有加入runloop 不会执行这句话
            [self performSelector:@selector(test) withObject:nil afterDelay:.0];
            NSLog(@"3");
        });
    }
    //输出:1 3 不会执行test方法,原因afterDelay需要加入runloop才可以启动
    

    相关文章

      网友评论

          本文标题:iOS 多线程面试题的输出类型考点

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