mirror of
https://github.com/NohamR/knowledge-kit.git
synced 2026-05-25 04:17:17 +00:00
feature: dyld && LD 链接器
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
单例与静态类的区别?
|
||||
有何替代的解决方案?
|
||||
|
||||
|
||||
|
||||
## 为什么要使用单例?
|
||||
|
||||
创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。其中单例模式、工厂模式、建造者模式、原型模式都是创建型模式。
|
||||
@@ -207,3 +209,34 @@ SingletonHolder 是一个静态内部类,当外部类 IdGenerator 被加载的
|
||||
## 如何理解单例模式的唯一性
|
||||
“一个类只允许创建唯一一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。定义中提到,“一个类只允许创建唯一一个对象”。那对象的唯一性的作用范围是什么呢?是指线程内只允许创建一个对象,还是指进程内只允许创建一个对象?答案是后者,也就是说,单例模式创建的对象是进程唯一的
|
||||
|
||||
|
||||
|
||||
## iOS 侧单例的实现
|
||||
|
||||
- GCD `dispatch_once` 保证执行1次
|
||||
|
||||
- 实现 `+ (id)allocWithZone:(struct _NSZOne *)zone { } ` 方法。避免单例对象,调用 copy 方法,产生一个新的对象,打破单例效果
|
||||
|
||||
实现 `- (id)copyWithZone:(nullable NSZone *)zone { }` 方法,避免单例对象,调用 copy 方法,产生一个新的对象,打破单例效果
|
||||
|
||||
|
||||
|
||||
```objective-c
|
||||
+ (id)sharedInstance {
|
||||
static Mooc *instance = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
instance = [[super allocWithZone:NULL] init];
|
||||
});
|
||||
return instance;
|
||||
}
|
||||
|
||||
+ (id)allocWithZone:(struct _NSZone *)zone {
|
||||
return [self sharedInstance];
|
||||
}
|
||||
|
||||
- (id)copyWithZone:(nullable NSZone *)zone {
|
||||
return self;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user