ios34---GDC,dispatch_once

Posted 672530440

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios34---GDC,dispatch_once相关的知识,希望对你有一定的参考价值。

//
//  ViewController.m
//  09-掌握-GCD常用函数
//
//  Created by xiaomage on 16/2/18.
//  Copyright ? 2016年 小码哥. All rights reserved.
//

#import "ViewController.h"
#import "XMGPerson.h"

@interface ViewController ()

@end

@implementation ViewController

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//    [self once];
    
    XMGPerson *p1 = [[XMGPerson alloc]init];
    XMGPerson *p2 = [[XMGPerson alloc]init];
    NSLog(@"%@---%@",p1.books,p2.books);
}

//延迟执行
-(void)delay
{
    NSLog(@"start-----");
    
    //1. 延迟执行的第一种方法
    //[self performSelector:@selector(task) withObject:nil afterDelay:2.0];
    
    //2.延迟执行的第二种方法
    //[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(task) userInfo:nil repeats:YES];
    
    //3.GCD
//    dispatch_queue_t queue = dispatch_get_main_queue();
     dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    /*
     第一个参数:DISPATCH_TIME_NOW 从现在开始计算时间
     第二个参数:延迟的时间 2.0 GCD时间单位:纳秒
     第三个参数:队列
     */
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), queue, ^{
        NSLog(@"GCD----%@",[NSThread currentThread]);
    });

}

//一次性代码
//不能放在懒加载中的,应用场景:单例模式
-(void)once
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{  //整个项目生命周期只执行一次,多次调用都不会执行多次
        NSLog(@"---once----");
    });
}

-(void)task
{
    NSLog(@"task----%@",[NSThread currentThread]);
}
@end
//
//  XMGPerson.h
//  09-掌握-GCD常用函数
//
//  Created by xiaomage on 16/2/18.
//  Copyright ? 2016年 小码哥. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface XMGPerson : NSObject

@property (nonatomic, strong) NSArray *books;
@end
//
//  XMGPerson.m
//  09-掌握-GCD常用函数
//
//  Created by xiaomage on 16/2/18.
//  Copyright ? 2016年 小码哥. All rights reserved.
//

#import "XMGPerson.h"

@implementation XMGPerson

-(NSArray *)books
{
//    if (_books == nil) {
//        _books = @[@"1234",@"56789"];
//    }
    
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{  //只执行一次
        _books = @[@"1234",@"56789"];
    });
    return _books;
}
@end

 

以上是关于ios34---GDC,dispatch_once的主要内容,如果未能解决你的问题,请参考以下文章

『ios』dispatch_once死锁和滥用单例导致的问题

FBSDK 9.0.1 错误:dispatch_once IOS Obj C

在 heightForImageCellAtIndexPath 中 dispatch_once 的原因

iOS开发-91GCD的同步异步串行并行NSOperation和NSOperationQueue一级用dispatch_once实现单例(转载)

(一二三)基于GCD的dispatch_once实现单例设计

Swift Facebook 登录在 dispatch_once 中被破坏