GCD的一般使用(单例/多线程/3)

单例的实现模式/确保了访问对象的唯一性,并且使线程安全

static NSObject *object = nil;
// 在整个程序执行期间只运行一次
- (IBAction)didClickOnceButton:(id)sender {
    static dispatch_once_t onceToken;
//    NSObject *objc
//    = nil;
//    __block NSObject *object = objc;
    dispatch_once(&onceToken, ^{
        object = [[NSObject alloc]init];
    });
    NSLog(@"%@", object);

}
  • 一个串行队列 (主队列)管理主线程的事务
 获得主队列 
dispatch_queue_t mainQueue = dispatch_get_main_queue();
在主队列执行任务
dispatch_async(mainQueue, ^{   
    [NSLog:@"hello"];
 });```

//***************3. 通过GCD的方式创建一个新的线程来异步加载图片***************//
dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
[self downLoadImage]; //回调 });
}

  • (void)downLoadImage
    { NSURL *imageURL = [NSURL URLWithString:self.figureurl];
    imageData = [NSData dataWithContentsOfURL:imageURL];
    [_pathCover setAvatarImage:[UIImage imageWithData:imageData]];
    }
    // 返回主线程更新UI

你可能感兴趣的:(GCD的一般使用(单例/多线程/3))