dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ });
// when 时间 从现在开始经过多少纳秒 dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)); void (^task)() = ^ { // 延迟操作执行的代码 NSLog(@"%@", [NSThread currentThread]); }; // 经过多少纳秒,由主队列调度任务异步执行 dispatch_after(when, dispatch_get_main_queue(), task); // 先执行就是异步,后执行就是同步 NSLog(@"come here");
static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ })
#if __has_feature(objc_arc) // ARC #else // MRC #endif
@implementation SoundTools // 定义一个静态成员,保存唯一的实例 static id instance; // 保证对象只被分配一次内存空间,通过dispatch_once能够保证单例的分配和初始化是线程安全的 + (instancetype)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [super allocWithZone:zone]; }); return instance; } // 保证对象只被初始化一次 + (instancetype)sharedSoundTools { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[self alloc] init]; }); return instance; } - (id)copyWithZone:(NSZone *)zone { return instance; } @end 测试代码如下: - (void)viewDidLoad { [super viewDidLoad]; SoundTools *s1 = [SoundTools sharedSoundTools]; NSLog(@"%p", s1); } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { SoundTools *s2 = [SoundTools sharedSoundTools]; NSLog(@"%p", s2); }
// 定义一个静态成员,保存唯一的实例 static id instance; // 保证对象只被分配一次内存空间,通过dispatch_once能够保证单例的分配和初始化是线程安全的 + (instancetype)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [super allocWithZone:zone]; }); return instance; } // 保证对象只被初始化一次 + (instancetype)sharedSoundTools { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[self alloc] init]; }); return instance; } - (id)copyWithZone:(NSZone *)zone { return instance; } #pragma mark - MRC内存管理方法 /** 因为单例的对象是保存在静态区的,因此需要重写 内存管理方法,取消默认的引用计数操作! */ // 默认会将引用计数-1 - (oneway void)release { // 什么也不做,跟highlight类似 } // 默认引用计数+1,同时返回一个对象 - (instancetype)retain { return instance; } // 默认添加自动释放标记,延迟释放! - (instancetype)autorelease { return instance; } // 返回有多少个对象对当前对象引用的数值 - (NSUInteger)retainCount { // 出处:limits.h 会根据CPU的架构自行调整整数的长度 return ULONG_MAX; }
原文:http://blog.csdn.net/u011058732/article/details/44523015