单例对象实现方法:
//单例,显然这里要用类方法获取单例对象
+ (instancetype) sharedInstance
{
static Singleton * _instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[self alloc] init];
});
return _instance ;
}
注解:
-
static Singleton *_instance = nil这里使用静态变量是为了保证对象被创建后在整个程序生命周期内不被释放。
-
+ (instancetype) sharedInstance;显然只能使用类方法。
-
static dispatch_once_t onceToken; dispatch_once_t是long类型。因为单例对象只能在整个程序结束后被释放,所以onceToken必须是static或global类型。
-
void dispatch_once(dispatch_once_t *predicate, dispatch_block_t block);是同步函数,函数会等待block里的操作都执行完成才返回。这个函数有predicate和block两个形参。
-
predicate是dispatch_once_t类型的指针,用来测试传入的block是否执行完成。
-
block是dispatch_block_t类型的变量,dispatch_block_t是没有参数没有返回值的block类型。block指向传入的block对象,这个block在整个程序生命周期内只会被执行一次,block里执行的操作是创建单例对象。
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。