iOS-OC和Swift单利创建

OC单利

#import "HttpTools.h"
+ (instancetype)shareManager;
#import "HttpTools.m"
+ (instancetype)shareManager
{
    static id instance;
    static dispatch_once_t onceToken;
    // onceToken默认等于0, 如果是0就会执行block, 如果不是0就不会执行
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });
    return instance;
}

Swift单利

推荐使用

// HttpTools.swift
    static let instance: HttpTools = HttpTools()

    class func shareHttpTools() -> HttpTools {
        return instance
    }

仿OC版

// 在Swift中, 类方法中是不允许定义静态变量的
    static var once_t: dispatch_once_t = 0
    static var instance: HttpTools?
    
    /// 用于获取单粒对象的类方法
    class func shareHttpTools() -> HttpTools{
        dispatch_once(&once_t) { () -> Void in
            instance = HttpTools()
        }
        return instance!
    }

单利优缺点

优点:

1:一个类只被实例化一次,提供了对唯一实例的受控访问。
2:节省系统资源

缺点:

1: 单例对象一旦建立,对象指针是保存在静态区的,单例对象在堆中分配的内存空间,会在应用程序终止后才会被释放。
2: 单例类无法继承,因此很难进行类的扩展。
3: 单例类的职责过重,在一定程度上违背了“单一职责原则”。
4: 单例不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。

你可能感兴趣的:(iOS-OC和Swift单利创建)