Home > AI > Uncategorized

RunLoop – AFP2.x一段源码

//GCD引进单例
//使用dispatch_once可以简化代码且保证线程安全,开发者无需担心加锁或同步。所有问题都在GCD底层处理
//此外,dispatch_once更高效。它没有使用重量级的同步机制。使用同步机制,每次运行代码都需要获取锁。dispatch_once采用“原子访问”来查询标记,判断代码是否执行过。
+ (NSThread *)threadSingle {
    static NSThread *new = nil;
    static dispatch_once_t *predicate;
    dispatch_once(predicate, ^{
        new = [[NSThread alloc]initWithTarget:self selector:@selector(portRun:) object:nil];
        [new start];
    });
    return new;
}

//常驻线程
+ (void)portRun :(id)__unused object{
    @autoreleasepool {
        [[NSThread currentThread]setName:@"AFP"];
        NSRunLoop *c = [NSRunLoop currentRunLoop];
         forMode:NSDefaultRunLoopMode];
        ;
    }
}

 

Related posts:

Leave a Reply