zoukankan      html  css  js  c++  java
  • 单例模式

    一.单例模式是设计模式的一种,它是由众多的程序猿前辈们总结出来的一种设计模式

    二.单例模式在整个程序过程中,一个类只有一个实例.从而达到节约系统资源的目的.比如说一些app的登录界面,可能在多个控制器中都需要用到,那么使用单例可以明显的节约系统资源.

    三.新建一个类,创建多个对象,如果打印他们的地址,都是一样的话,就说明这个类是一个单例.其中有个注意的地方,必须是同一种创建方式,如果不是同一种创建方式,看起来像"单例",但是打印地址是不一样的.

    四.单例的实现分为ARC环境下和MRC环境下.

      

    #import "JHTool.h"
    
    @implementation JHTool
    
    //1.提供一个静态变量
    static JHTool * _instance;
    
    //2.重写该方法控制只分配一次空间
    +(instancetype)allocWithZone:(struct _NSZone *)zone
    {
    //加同步锁方式
        /*
        @synchronized(self) {
            if (_instance == nil) {
                _instance = [super allocWithZone:zone];
            }
        }
        */
    
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _instance = [super allocWithZone:zone];
        });
        return _instance;
    }
    
    //3
    +(instancetype)shareJHTool
    {
        return [[self alloc]init];
    }
    
    //4.更严谨的做法,需要考虑copy 和mutableCopy操作
    -(id)copyWithZone:(NSZone *)zone
    {
        return _instance;
    }
    
    -(id)mutableCopyWithZone:(NSZone *)zone
    {
        return _instance;
    }
    
    #if __has_feature(objc_arc)
    
    #else
    //MRC情况下
    -(oneway void)release
    {
        
    }
    
    -(instancetype)retain
    {
        return _instance;
    }
    
    //检查对象的引用计数器
    -(NSUInteger)retainCount
    {
        return MAXFLOAT;
    }
    #endif
    
    @end
  • 相关阅读:
    HDUOJ 1397(素数筛选法)
    HDUOJ 2045 LELE的RPG难题
    HDUOJ 2018
    HDUOJ 2031
    HDUOJ 2050
    括号配对问题
    HDOJ 1102 Constructing Roads(最小生成树)
    HDOJ Prime Ring Problem (深度优先搜索)
    HDUOJ 1233 还是畅通工程(最小生成树基础)
    邻接表(转)
  • 原文地址:https://www.cnblogs.com/naiwenmoer/p/5535776.html
Copyright © 2011-2022 走看看