iOS 单例对象创建

来源:互联网 发布:移动互联网数据 编辑:程序博客网 时间:2024/04/28 23:55

//  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 = [[selfallocWithZone:NULL]init];

    }

    

    return single;

}

}


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

+(SingleManger *)shareSingle

{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        

        single = [[SingleMangeralloc]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 [SingleMangershareSingle] ;

}


-(id) copyWithZone:(struct_NSZone *)zone

{

    return [SingleMangershareSingle] ;

}


//这种方法是防止我们通过不同的途径得到不同的对象(alloc copy),但不被大家所推荐,具体原因大家可以去看官方文档(主要是我自己也只是了解个大概,汗颜...........)



0 0
原创粉丝点击