博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
objective-c中的Singleton单例模式的完整实现示例
阅读量:4961 次
发布时间:2019-06-12

本文共 1558 字,大约阅读时间需要 5 分钟。

转载自:

Objective中单例模式的实现,应该是比较完整的包括了objc的单例的各个点。详细看代码注释,注意最后用c++的析构函数实现instance的释放,所以源文件类型必须是.mm格式。

//

//  FullSingleton.h

//  *********

//

//  Created by ********* on 12-2-23.

//  Copyright (c) 2012 ***********. All rights reserved.

//

#import <Foundation/Foundation.h>

@interface FullSingleton : NSObject {

    

}

+(FullSingleton *) getInstance;

@end

//

//  FullSingleton.mm

//  *********

//

//  Created by ********** on 12-2-23.

//  Copyright (c) 2012 *********. All rights reserved.

//

#import "FullSingleton.h"

static FullSingleton * instance = nil;

@interface FullSingleton(privateMethods)

-(void) realRelease;

@end

@implementation FullSingleton

// 获取单例~

+(FullSingleton*) getInstance {

    @synchronized(self) {

        if (instance == nil) {

            [[self alloc] init];

        }

    }

    return instance;

}

// 唯一一次 alloc 单例,之后均返回 nil~

+(id) allocWithZone:(NSZone *)zone {

    @synchronized(self) {

        if (instance == nil) {

            instance = [super allocWithZone:zone];

            return instance;

        }

    }

    return nil;

}

// copy 返回单例本身~

-(id) copyWithZone:(NSZone *)zone {

    return self;

}

// retain 返回单例本身~

-(id) retain {

    return self;

}

// 引用计数总是为 1~

-(NSUInteger) retainCount {

    return 1;

}

// release 不做任何处理~

-(oneway void) release {

    

}

// autorelease 返回单例本身~

-(id) autorelease {

    return self;

}

// release 私有接口~

-(void) realRelease {

    [super release];

}

//

-(void) dealloc {

    printf("举例:在此处做一些单例结束时的收尾处理/n"); 

    [super dealloc];

}

@end

// 程序结束时析构静态 c++ 类对象 garbo,在Garbo类的析构函数中释放instance~

struct Garbo {

    ~Garbo(){

        [instance realRelease];

    }

};

static Garbo garbo;

转载于:https://www.cnblogs.com/yang3wei/archive/2012/02/23/2739897.html

你可能感兴趣的文章
HCA数据下载
查看>>
Codeforces 954 G. Castle Defense
查看>>
反射机制-----------通过它获取类中所有东西 出了注释
查看>>
svn的一个连接
查看>>
position:fixed和z-index:1
查看>>
unity, 延迟执行代码
查看>>
mysq找不到pid无法正常启动
查看>>
php实现抓取网站百度快照和百度收录数量的代码实例
查看>>
Qt那点事儿(三) 论父对象与子对象的关系
查看>>
jar 命令 打包装class文件的文件夹
查看>>
node.js express配置允许跨域
查看>>
JSP EL表达式详细介绍(转)
查看>>
要想找出正好包含5个字符的名字
查看>>
用js把图片做的富有动态感,并对以后需要用着的属性进行封装
查看>>
ArcGIS Runtime For Android 100.3天地图不加载问题
查看>>
线性表
查看>>
【转】解决eclipse新导入工程无法run as server
查看>>
【转】struts1.2的action参数配置
查看>>
快速幂&快速乘
查看>>
WebLogic 12c 多节点Cluster静默安装
查看>>