网上找了些资料总结的:
首先需要定义一个全局唯一的对象(用static修饰),然后重写+ (id)allocWithZone:(struct _NSZone *)zone方法(该方法是类调用alloc方法时调用的),在该方法中声明static dispatch_once_t onceToken,该变量用来判断此方法是否是首次被执行,然后执行void dispatch_once(dispatch_once_t *predicate, dispatch_block_t block);函数,这个函数,接收一个dispatch_once_t,判断该代码段是否被执行过,实际上作BOOL使用,还会接收一个在生命周期内只执行一次的代码块,还有一部分关于多线程的说法,没看太懂... |
|