码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2016-08-18 01:02:10      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

 

1 基本概念
    1)单例模式
        在程序运行过程,一个类只有一个实例
    2)使用场合
        在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次)

2 ARC实现单例
    1)步骤
        01 在类的内部提供一个static修饰的全局变量
        02 提供一个类方法,方便外界访问
        03 重写+allocWithZone方法,保证永远都只为单例对象分配一次内存空间
        04 严谨起见,重写-copyWithZone方法和-MutableCopyWithZone方法

    2)相关代码
        //提供一个static修饰的全局变量,强引用着已经实例化的单例对象实例
        static HCSTools *_instance;

        //类方法,返回一个单例对象
        +(instancetype)shareTools
        {
             //注意:这里建议使用self,而不是直接使用类名Tools(考虑继承)

            return [[self alloc]init];
        }

        //保证永远只分配一次存储空间
        +(instancetype)allocWithZone:(struct _NSZone *)zone
        {
            //使用GCD中的一次性代码
        //    static dispatch_once_t onceToken;
        //    dispatch_once(&onceToken, ^{
        //        _instance = [super allocWithZone:zone];
        //    });

            //使用加锁的方式,保证只分配一次存储空间
            @synchronized(self) {
                if (_instance == nil) {
                    _instance = [super allocWithZone:zone];
                }
            }
            return _instance;
        }
        /*
        1. mutableCopy 创建一个新的可变对象,并初始化为原对象的值,新对象的引用计数为 1;
        2. copy 返回一个不可变对象。分两种情况:(1)若原对象是不可变对象,那么返回原对象,并将其引用计数加 1 ;(2)若原对象是可变对象,那么创建一个新的不可变对象,并初始化为原对象的值,新对象的引用计数为 1。
        */
        //让代码更加的严谨
        -(nonnull id)copyWithZone:(nullable NSZone *)zone
        {
        //    return [[self class] allocWithZone:zone];
            return _instance;
        }

        -(nonnull id)mutableCopyWithZone:(nullable NSZone *)zone
        {
            return _instance;
        }

单例模式

标签:

原文地址:http://www.cnblogs.com/moson/p/5782302.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!