IOS单例模式

单例模式

可以保证在程序运行过程中,一个类只有一个实例,而且该实例易于供外界访问 (eg:音乐播放器,多个控制器都播放同一首音乐,但是这个音乐只加载一次)

    [UIApplication sharedApplication];就是一种单例模式

 

设计单例模式(一般设计成类方法)

重写+ (id)allocWithZone:(struct _NSZone *)zone 方法,因为alloc的底层调用是调用该方法

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

{
    // 定义一份变量(整个程序运行过程中只有一份)而且allocWithZone方法需要返回一值
    static id instance = nil;
    // 里面的代码永远只执行一次
    static dispatch_once_t onceTonken;
    dispatch_once(&onceTonken, ^{
        instance = [super allocWithZone:zone];
    });
    
    // 返回对象
    return instance;
}

重写init方法 

 static id _instance;


- (id)init
{
    if (self = [super init]) {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            // 在这里面写只需要初始化一次的数据
            _instance = [[self alloc] init];
        });
    }
    return self;
}

还有。。。。。。。。

block内部只能改变__block的成员变量,其他变量在__block内部无法改变 


单例模式:

1.永远只分配一块内存来创建对象
2.提供一个类方法,返回内部唯一的一个对象(一个实例)
3.最好保证init方法也只初始化一次

 

posted @ 2015-06-10 23:26  aprogrammer  阅读(96)  评论(0编辑  收藏  举报