jiyuzi 发表于 2015-3-16 11:53

Objective-C单例模式

单例类是一种特殊的类,在一个进程种只会存在一个该类的对象,在iOS应用中只会出现一个对象。这种设计模式在系统框架中许多地方都使用了,如NSFileManager、UIApplication等。http://www.2cto.com/uploadfile/Collfiles/20150314/20150314084245107.jpg
[*]在ARC的环境下,接口文件为:////DVISingleton.h////Copyright (c) 2014 长沙戴维营教育. All rights reserved.//#import @interface DVISingleton : NSObject+ (instancetype)sharedSingleton;@end实现文件:////DVISingleton.m////Copyright (c) 2014 长沙戴维营教育. All rights reserved.//#import "DVISingleton.h"@implementation DVISingleton+ (instancetype)sharedSingleton{    static DVISingleton *sharedObject = nil;    //线程安全,只允许执行依次    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{      //使用父类的allocWithZone:方法创建对象      sharedObject = [ init];    });    return sharedObject;}- (id)init{    if (self = ) {    }    return self;}+ (id)allocWithZone:(struct _NSZone *)zone{    return ;}www.2cto.com- (id)copy{    return self;}- (void)dealloc{}@end
[*]在非ARC环境下的实现文件:#import "DVISingleton.h"@implementation DVISingleton+ (instancetype)sharedSingleton{    static DVISingleton *sharedObject = nil;    //线程安全,只允许执行依次    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{      //使用父类的allocWithZone:方法创建对象      sharedObject = [ init];    });    return sharedObject;}+ (id)allocWithZone:(NSZone *)zone {return [ retain];}- (id)copyWithZone:(NSZone *)zone {return self;}- (id)retain {return self;}- (unsigned)retainCount {return UINT_MAX; //denotes an object that cannot be released}- (oneway void)release {// never release}- (id)autorelease {return self;}- (id)init {if (self = ) {}return self;}- (void)dealloc {;}@end


页: [1]
查看完整版本: Objective-C单例模式