iOS用dispath_once 和@synchronized创
@synchronized 的优点
- 使用dispath_once 创建单例 如果对象销毁就不能重新创建 使用@synchronized则可以避免这种情况的发生
- 使用block而非函数指针这样代码更加自然
@synchronized 的弊端
+ (id)sharedInstance
{
static Instance *obj = nil;
@synchronized([Instance class])
{
if(!obj)
obj = [[Instance alloc] init];
}
return obj;
}
dispath_once的优点
- 性能上比@synchronized高一些
- 满足了线程安全的问题
- 它可以保证block中的代码在任何线程通过dispatch_once调用之前被执行,但它不会强制每次调用这个函数都让代码进行同步控制。实际上,如果你去看这个函数所在的头文件,你会发现目前它的实现其实是一个宏,进行了内联的初始化测试,这意味着通常情况下,你不用付出函数调用的负载代价,并且会有更少的同步控制负载
+ (id)sharedInstance
{
static dispatch_once_t pred;
static Instance *obj = nil;
dispatch_once(&pred, ^{
obj = [[Instance alloc] init];
});
return obj;
}
本文标题:iOS用dispath_once 和@synchronized创
本文链接:https://www.haomeiwen.com/subject/yyciextx.html
网友评论