iOS主要知识总结--单例模式

作者: 奕十八 | 来源:发表于2016-07-18 11:18 被阅读68次

    单例模式的实现

    单例是一种很常见的模式,它的原理就是使程序运行过程中,某个类只有一个实例,无论以什么方式创建,都返回同一个实例化对象。它的具体实现代码如下所示:

    @implementation WJTool
    
    //提供一个static修饰的全局静态变量,这句代码保证了单例的生命周期是整个函数
    static WJTool *_instance;
    
    //alloc内部会调用这个方法
    +(instancetype)allocWithZone:(struct _NSZone *)zone{
       //之前普遍的写法,但是并不能保证线程安全
        /*
        @synchronized (self) {
            if (_instance==nil) {
                _instance = [super allocWithZone:zone];
            }
        }   */
    
        //为了既能使创建实例的代码只执行一次,并且保证线程安全,这里使用GCD的一次性函数最好不过
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _instance=[super allocWithZone:zone];
        });
        return _instance;
    }
    
    //一般情况下,工具类都会提供一个类方法来供外界调用
    +(instancetype)shareTool{
        return [[self alloc]init];
    }
    
    
    //严谨起见,重写copyWithZone和MutableCopyWithZone方法
    -(id)copyWithZone:(NSZone *)zone{
        return _instance;
    }
    
    -(id)mutableCopyWithZone:(NSZone *)zone{
        return _instance;
    }
    

    单例的简洁实现:

    在开发中,为了提高编码效率,并且这个单例是自己在已知的情况下调用,可以采用简单的方法实现:

    +(instancetype)shareTool
    {
        static WJTool *_instance;
    
        static dispatch_once_t onceToken;
    
        dispatch_once(&onceToken, ^{
            _instance = [[self alloc]init];
        });
    
        return _instance;
    }
    
    xcode.png

    相关文章

      网友评论

        本文标题:iOS主要知识总结--单例模式

        本文链接:https://www.haomeiwen.com/subject/gympjttx.html