单例
来源:互联网 发布:中国知网的数据库 编辑:程序博客网 时间:2024/04/30 05:22
- 单例必须是唯一的,所以它才被称为单例。在一个应用程序的生命周期里,有且只有一个实例存在。单例的存在给我们提供了一个唯一的全局状态。比如我们熟悉的NSNotification,UIApplication和NSUserDefaults都是单例。
- 为了保持一个单例的唯一性,单例的构造器必须是私有的。这防止其他对象也能创建出单例类的实例。感谢所有帮我指出这点的人。
- 为了确保单例在应用程序的整个生命周期是唯一的,它就必须是线程安全的。当你一想到并发肯定一阵恶心,简单来说,如果你写单例的方式是错误的,就有可能会有两个线程尝试在同一时间初始化同一个单例,这样你就有潜在的风险得到两个不同的单例。这就意味着我们需要用GCD的dispatch_once来确保初始化单例的代码在运行时只执行一次
oc下单例的创建
<pre name="code" class="objc">@interface HttpManager : NSObject+ (HttpManager *)defaultManager;@end
@implementation HttpManager+ (HttpManager *)defaultManager{ static dispatch_once_t once_t = 0; __strong static id defaultHttpManager = nil; dispatch_once(&once_t, ^{ defaultHttpManager = [[self alloc] init]; }); return defaultHttpManager;}
swift版:
class Tool: NSObject { static let sharedTool = Tool() // 私有化构造方法,阻止其他对象使用这个类的默认的'()'构造方法 private override init() {} }
0 0