O_C 创建单例有两种方式
1、使用线程锁
+(instancetype) shareInstance
{
// static dispatch_once_t once;
@synchronized(self)
{
if (doctorUser_ == nil)
{
doctorUser_ = [[LMDoctorUser alloc]init];
}
return doctorUser_;
}
}
2、使用dispatch_once_t
+(instancetype) shareInstance
{
static dispatch_once_t once;
dispatch_once(&once, ^{
doctorUser_ = [[LMDoctorUser alloc]init];
});
return doctorUser_;
}
对于使用线程锁的单例可以使用如下方法对单例数据进行清空
+ (void) destroyShareInstance
{
doctorUser_ = nil;
}
对于使用dispatch_once的数据该怎么清空,求大神!!!
http://www.cnblogs.com/ygm900/p/3607143.html
这个问题不要想太多,现在都是arc内纯管理了,也就是说没有一个强指针指向之后就会自动释放,你把单利对象赋值为空,然后在把static dispatch_once_t once;的值赋值为0就行了,static dispatch_once_t once;不赋值为0就不能生成新的单利了。如果说你的数据没有被清空,可以是控制器还是什么对这个对象有强引用。
为什么要清空啊,你用单例不就是确保它只能初始化一次吗,程序大退出后就释放了啊