美文网首页
常驻线程

常驻线程

作者: wustzhy | 来源:发表于2017-11-08 23:27 被阅读39次
    模仿曾经的AFN常驻线程写法,现在的YY的写法也是如此
    + (NSThread *)zyThread {
        static NSThread * _zyThread = nil;
        static dispatch_once_t oncePredicate;
        dispatch_once( &oncePredicate, ^{
            _zyThread = [[NSThread alloc]initWithTarget:self
                                               selector:@selector(zyThreadEntryPoint:)
                                                 object:nil];
            [_zyThread start];
        });
        return _zyThread;
    }
    
    + (void)zyThreadEntryPoint:(id) __unused objec {
        @autoreleasepool {
            [[NSThread currentThread] setName:@"ZY_Thread"];
            [[NSRunLoop currentRunLoop] addPort:[NSMachPort port] forMode:NSRunLoopCommonModes];
            [[NSRunLoop currentRunLoop] run];
        }
    }
    
    使用performSelector: onThread:简单调用如下
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
        
        [self performSelector:@selector(sayHello:)
                     onThread:[ZYThread zyThread]
                   withObject:@"hello~"
                waitUntilDone:NO];
        // waitUntilDone:等selector执行完 再往下执行
        // wait:NO , 先touches method 再 sayHello
        NSLog(@" touches method ~ ");
    }
    
    - (void)sayHello:(id)object
    {
        
        NSLog(@"%@------ %@", object , [NSThread currentThread]);
    }
    
    
    Xcode中可见
    • image.png

    当然,现在的AFN不是上面那么用了,如下

    1

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
           [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
      ···
    

    2

    [[NSRunLoop mainRunLoop] addTimer:self.completionDelayTimer forMode:NSRunLoopCommonModes];
    

    相关文章

      网友评论

          本文标题:常驻线程

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