前言:公司倒闭了重新找工作,开始各种面试,那就回答面试题吧,问的知识点也知道,但就是说出去让面试官觉得很乱,希望通过写技术点博客来锤炼自己吧(刚开始写,会有点乱,加油)。
单例模式:高频面试题。一旦被问到,就直接回答“单例模式就是整个工程中保证只有一个实例,无论何时何地获取。”
单例的写法:
1.最基本的写法
+(instancetype)sharedInstance {
static Dog *dog = nil;
if (dog == nil) {
dog = [[Dog alloc] init];
}
return dog;
}
2.考虑线程安全
+ (instancetype)sharedInstance {
static Dog *dog = nil;
@synchronized(self) {
if (!dog) {
dog = [[Dog alloc] init];
}
}
return dog;
}
虽然了添加了线程锁,但是每次都有取锁过程,很耗性能。
3.使用dispatch_once
+ (instancetype)sharedInstance {
static Dog *dog = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
dog = [[Dog alloc] init];
});
return dog;
}
推荐使用这种。使用GCD满足了线程安全问题,又可以节省时间和性能。
小结:
这只是单例的用法,再去学学单例为什么这样用。