单例模式-非ARC

network | | 访问(44)

关闭ARC功能

#import "DataTool.h"

@implementation DataTool
// 用来保存唯一的单例对象
static id _instace;

+ (id)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instace = [super allocWithZone:zone];
    });
    return _instace;
}

+ (instancetype)sharedDataTool
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instace = [[self alloc] init];
    });
    return _instace;
}

- (id)copyWithZone:(NSZone *)zone
{
    return _instace;
}

- (oneway void)release { }// 重写release
- (id)retain { return self; }
- (NSUInteger)retainCount { return 1;}
- (id)autorelease { return self;}

@end

调用方法

DataTool *tool1 = [[DataTool alloc] init];
DataTool *tool2 = [[DataTool alloc] init];
DataTool *tool3 = [DataTool sharedDataTool];
DataTool *tool4 = [DataTool sharedDataTool];
    
[tool4 autorelease];// 将对象清理掉
    
NSLog(@"%@ %@ %@ %@", tool1, tool2, tool3, tool4);