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

    SigleTon.h文件

    #import <Foundation/Foundation.h>

    @interface SigleTon : NSObject<NSCopying>

    +(SigleTon *)shareInstance;

    @end

    SigleTon.m文件

    #import "SigleTon.h"

    @implementation SigleTon

    static SigleTon *sigleton;

    +(SigleTon *)shareInstance

    {

        if (sigleton==nil)

        {

            sigleton=[[SigleTon alloc] init];

        }

        return sigleton;

        

    }

    //重写allocWithZone的方法

    +(instancetype)allocWithZone:(struct _NSZone *)zone

    {

        if (sigleton==nil)

        {

            sigleton=[super allocWithZone:zone];

        }

        return sigleton;

    }

    //重写copyWithZone的方法

    -(id)copyWithZone:(NSZone *)zone

    {

        return self;

    }

    @end

    main.m文件

            SigleTon *sing1=[SigleTon shareInstance];

            SigleTon *sing2=[SigleTon shareInstance];

            SigleTon *sing3=[[SigleTon alloc] init];;

            SigleTon *sing4=[SigleTon new];

            SigleTon *sing5=[sing4 copy];

           

            NSLog(@"%p",sing1);

            NSLog(@"%p",sing2);

            NSLog(@"%p",sing3);

            NSLog(@"%p",sing4);

            NSLog(@"%p",sing5);

    运行结果如下

    2016-03-04 22:27:41.643 单例模式[2166:239114]  0x100106bf0

    2016-03-04 22:27:41.643 单例模式[2166:239114] 0x100106bf0

    2016-03-04 22:27:41.643 单例模式[2166:239114] 0x100106bf0

    2016-03-04 22:27:41.644 单例模式[2166:239114] 0x100106bf0

    2016-03-04 22:27:41.644 单例模式[2166:239114] 0x100106bf0

    由结果可以看出,每一个对象的地址都是一样的,保证了每一个实例的对象都是同一个

    单例模式的要点:

    一是某个类只能有一个实例;

    二是它必须自行创建这个实例;

    三是它必须自行向整个系统提供这个实例。

  • 相关阅读:
    webpack devServer配置项的坑
    app混合开发 fastlick.js 在ios上 input标签点击 不灵敏 处理
    vue 学习八 自定义指令
    Verilog数值大小比较
    Verilog实现Matlab的fliplr函数
    基本不等式
    如何读取ila数据
    Xilinx FPGA时钟IP核注意事项
    FPGA Turbo译码器注意事项
    EbN0转SNR
  • 原文地址:https://www.cnblogs.com/layios/p/5243696.html
Copyright © 2011-2022 走看看