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

    单例设计模式

    基本概念

    单例设计模式运用较为普遍、广泛且较为简单的设计模式之一,它的设计原理是始终返回一个实例,即一个类始终只有一个实例。

     

    创建单例的基本步骤

    • 声明一个单例对象的静态实例
    • 创建一个类的类工厂方法,生成一个该类的实例,当且仅当这个类的实例为nil时。
    • 覆盖 allocWithZone: 方法,确保用户程序员在直接分配和初始化对象时,不会产生另一个对象。
    • 实现 NSCopying 协议,覆盖 release,autorelease,retain,retainCount 方法,以此确保单例的状态。
    • 在多线程的环境中,注意使用@synchronized 关键字,确保静态实例被正确的创建和实例化。

    单例基本实现

    static UserContext *segtonInstance = nil;
    
    @implementation UserContext
    
    +(id)shareUserContext{
        @synchronized(self){
            //线程安全
            if (segtonInstance == nil) {
    
                segtonInstance = [[[self class] alloc] init];
            }
        }
        return segtonInstance;
    }
    
    //重写 allocWithZone: 方法
    +(id)allocWithZone:(NSZone *)zone{
        if (segtonInstance == nil) {
            segtonInstance = [super allocWithZone:zone];
        }
        return segtonInstance;
    }
    
    - (id)copyWithZone:(NSZone *)zone
    {
        return segtonInstance;
    }

     

    //覆盖 release,autorelease,retain,retainCount 方法方法
    
    //返回本身
    -(id)retain
    {
        return self;
    }
    
    -(NSInteger)retainCount
    {
        return UINT_MAX;
    }
    
    -(id)autorelease{
        return self;
    }
    -(oneway void)release
    {
    
    }
    //验证单例
      UserContext *user1 = [UserContext shareUserContext];
            UserContext *user2 = [UserContext shareUserContext];
            UserContext *user3 = [[UserContext alloc] init];
            UserContext *user4 = [[UserContext alloc] init];
            UserContext *user5 = [[UserContext copy];
    
            NSLog(@"%@",user1);
            NSLog(@"%@",user2);
            NSLog(@"%@",user3);
            NSLog(@"%@",user4);
            NSLog(@"%@",user5);
  • 相关阅读:
    专为seo新手准备的百度分享工具教程
    什么是关键词权重
    什么是关键词堆砌
    什么是目标关键词
    华为SEO搜索引擎主管招聘内容
    长尾关键词是什么意思
    Java面试宝典(7)混合2
    SpringMVC学习(5):数据绑定2 @PathVariable、@CookieValue、@RequestHeader、@ModelAttribute..
    MyBatis中XML 映射配置文件的简单介绍
    最牛B的编码套路
  • 原文地址:https://www.cnblogs.com/ShaoYinling/p/4586988.html
Copyright © 2011-2022 走看看