
[email protected]单例
1 |
+ (id)sharedInstance { |
2.GCD单例(推荐)
1 |
+ (id)sharedInstance { |
dispatch_once的函数原型为void dispatch_once(dispatch_once_t *predicate, dispatch_block_t block)
其中,dispatch_once_t是long类型的typedef,
代码为typedef long dispatch_once_t;
dispatch_block_t是一个代码块的typedef,
代码为typedef void (^dispatch_block_t)(void);
这个函数的作用是使得block在整个程序的生命周期中只执行一次,此操作时是线程安全的,每次调用这段代码是通过onceToken来检查,注意onceToken必须严格初始化为0。在调用dispatch_once函数时检查到其值为0时,就执行block,执行完毕后onceToken减一。下一次调用dispatch_once函数时检查到onceToken = -1,就不会执行block。
- 如果
oncceToken = 0,那么执行block。 - 如果
onceToken = -1,那么不执行block并继续往下执行。 - 如果
onceToken != 0 && onceToken != -1,那么程序将一直卡在dispatch_once函数那里。




近期评论