设计模式——单例

单例,确保程序运行中该类只有一个实例,常用于资源共享。例如:[UIApplication sharedApplication];

OC写法:

#import <Foundation/Foundation.h>

@interface Review_SingleInstance : NSObject
+(Review_SingleInstance *)shareInstance;
@end

#import "Review_SingleInstance.h"

@implementation Review_SingleInstance

static Review_SingleInstance *_instance = nil;

+(Review_SingleInstance *)shareInstance{   

    static dispatch_once_t onceToken;   

    dispatch_once(&onceToken, ^{       

        _instance = [[[self class] alloc] init];   

    });   

    return _instance;

}
//为了防止使用alloc、new重复创建对象,需要添加下面方法
+(instancetype)allocWithZone:(struct _NSZone *)zone{   

    static dispatch_once_t onceToken;   

    dispatch_once(&onceToken, ^{       

        _instance = [super allocWithZone:zone];   

    });   

    return _instance;

}

调用:

Review_SingleInstance *instance1 = [Review_SingleInstance shareInstance];    
NSLog(@"%@",instance1);

Swift写法:

import UIKit

class RISDesignPattern:NSObject{

    // MARK: - 单例

    static let instance : RISDesignPattern = RISDesignPattern()

    private override init() {

    }

}

调用:

// MARK: - 实例化设计模式 - 单例   

let designPattern = RISDesignPattern.instance

关于单例类属性的问题

单例类中属性赋值 - 需要创建获取空间的属性,要放在shareInstance中,才不会重复创建,因为init方法会被重新执行

推荐阅读更多精彩内容

  • 面试的时候,经常会被问到一些问题。大致总结一下思路,用来回答面试关的问题。 比如面试官会问到单例。可以从以下几点出...
    羊妞麻麻阅读 50评论 0 1
  • 单例模式(singleton) 单例模式最初的定义出现于《设计模式》(Addison-Wesley,1994) 单...
    Ro_bber阅读 115评论 0 3
  • 单例模式(Singleton):在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有...
    _SHYII阅读 182评论 0 2
  • 单例模式 介绍 为了节约系统资源,有时需要确保系统中某个类只有唯一一个实例,当这个唯一实例创建成功之后,我们无法再...
    666真666阅读 136评论 0 6
  • 设计模式 设计模式分为三大类:创建型、结构型、行为型在Java中有24中设计模式 创建型:单例 1、为什么用单例模...
    sjxt阅读 58评论 0 0