天天看点

oc非ARC机制实现单例模式import “KIT.h”

//

// KIT.m

//

//

// Created by yz on 15/9/28.

// Copyright (c) 2015年 yz. All rights reserved.

//

import “KIT.h”

static KIT *_kit = nil;

@implementation KIT

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

{

if (_kit == nil) {

static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
        //此方法只会运行一次
        _kit = [super allocWithZone:zone];

    });

}

return _kit;
           

}

-(instancetype)init

{

//只初始化一次

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

_kit = [super init];

});

return _kit;
           

}

//此类方法等价于[类名 alloc]init]

+(instancetype)shareKit

{

return [[self alloc]init];

}

//此方法重写不能继承[super release]那样_kit==nil因为开始的时候已经分配好空间,这样就会让_kit一直等于nil实现不了单例子

-(oneway void)release

{

}

-(instancetype)retain

{

return self;

}

@end

oc