单例

来源:互联网 发布:中国知网的数据库 编辑:程序博客网 时间: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
原创粉丝点击