您的位置:首页 > 移动开发 > IOS开发

iOS 单例对象创建

2016-06-20 13:33 267 查看
//  Created by 刘俊杰 on 16/6/20.

//  Copyright © 2016年
刘俊杰. All rights reserved.

//

#import "SingleManger.h"

static SingleManger * single;

@implementation SingleManger

//第一种写法,不用GCD,比较简单

+(SingleManger *)shareSingle

{

    if (!single) {

        

        single = [[self
allocWithZone:NULL]
init];

    }

    

    return single;

}


}

//还有一种大家比较喜欢用的写法

+(SingleManger *)shareSingle

{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        

        single = [[SingleManger
alloc]init];

        

    });

    

    return single;

}

/**

 *   dispatch_once(&onceToken, ^{

   });

 

这个函数是专为单例而生,保证整个应用程序生命周期中某段代码只被执行一次block对象

 */

//还有一种比较有争议的写法

+(SingleManger *)shareSingle

{

    static SingleManger * single;

    

    if (single ==
nil) {

        single = [[super
allocWithZone:NULL]
init];

    }

    return single;

}

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

{

    return [SingleManger
shareSingle] ;

}

-(id) copyWithZone:(struct
_NSZone *)zone

{

    return [SingleManger
shareSingle] ;

}

//这种方法是防止我们通过不同的途径得到不同的对象(alloc copy),但不被大家所推荐,具体原因大家可以去看官方文档(主要是我自己也只是了解个大概,汗颜...........)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: