zoukankan      html  css  js  c++  java
  • OC原理之多线程(二)

    对于如下代码的,它的打印结果是什么

    NSThread *thread = [[NSThread alloc] initWithBlock:^{
            NSLog(@"1");
        }];
        [thread start];
        [self performSelector:@selector(testhaha) onThread:thread withObject:nil waitUntilDone:true];
    
    - (void)testhaha {
        NSLog(@"2");
    }

    运行之后打印结果如下:

    2021-02-23 23:59:45.245881+0800 KVOTest[17729:646223] 1
    2021-02-23 23:59:45.253879+0800 KVOTest[17729:646135] *** Terminating app due to uncaught exception 'NSDestinationInvalidException', reason: '*** -[ViewController performSelector:onThread:withObject:waitUntilDone:modes:]: target thread exited while waiting for the perform'
    *** First throw call stack:

    从报错来看,在执行testhaha方法的时候,线程已经退出

    解决方法,开启runloop,延长线程的时间:

    NSThread *thread = [[NSThread alloc] initWithBlock:^{
            NSLog(@"1");
            [[NSRunLoop currentRunLoop] addPort:[[NSPort alloc] init] forMode:NSRunLoopCommonModes];
            [[NSRunLoop currentRunLoop] run];
        }];
        [thread start];
        [self performSelector:@selector(testhaha) onThread:thread withObject:nil waitUntilDone:true];
    
    - (void)testhaha {
        NSLog(@"2");
    }
  • 相关阅读:
    0531day05
    0530day04
    0529day03
    0528day02
    0527day01
    0527学习心得
    javascript 2
    javascript
    CSS
    CSS知识
  • 原文地址:https://www.cnblogs.com/muzichenyu/p/14438984.html
Copyright © 2011-2022 走看看