zoukankan      html  css  js  c++  java
  • ObjectiveC更适合的单例实现(iOS设计模式)

    创建单例的步骤:

    声明一个单例对象的静态实例,并初始化为nil。

    在该类的类工厂方法(名称类似于“sharedInstance”或“sharedManager”)中生成该类的一个实例,但仅当静态实例为nil的时候。

    重载allocWithZone:方法,确保当用户试图直接(而不是通过类工厂方法)分配或初始化类的实例时,不会分配出另一个对象。

    实现基本协议方法:copyWithZone:、release、retain、retainCount、和autorelease,以保证单例的状态。

    实现单例的代码例子:(iOS设计模式 page83)

    #import "Singleton.h"
    
    @implementation Singleton
    
    static Singleton *sharedSingleton = nil;
    
    + (Singleton *)sharedInstance
    {
        if (sharedSingleton == nil)
        {
            sharedSingleton = [[super allocWithZone:NULL] init];
        }
        return sharedSingleton;
    }
    
    + (id)allocWithZone:(NSZone *)zone
    {
        return [[self sharedInstance] retain];
    }
    
    - (id)copyWithZone:(NSZone *)zone
    {
        return self;
    }
    
    - (id) retain
    {
        return self;
    }
    
    - (NSUInteger) retainCount
    {
        return NSUIntegerMax;
    }
    
    - (void)release
    {
        
    }
    
    - (id) autorelease
    {
        return self;
    }
    @end
    

      

  • 相关阅读:
    协方差矩阵
    Adobe Photoshop CS6下载安装
    等差数列
    照片产尺寸
    移动立方体算法
    float与double的范围和精度
    C/C++运算符优先级
    通过 Windows API 获取鼠标位置等状态信息
    VC++ 获取鼠标状态,获取鼠标弹起消息
    python动态给对象或者类添加方法
  • 原文地址:https://www.cnblogs.com/hellocby/p/2738667.html
Copyright © 2011-2022 走看看