IOS中使用单例的简单介绍

第一、基本概念
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问。
第二、在IOS中使用单例模式的情况
1.如果说创建一个对象会耗费很多系统资源,那么此时采用单例模式,因为只需要一个实例,会节省alloc的时间
2.在IOS开发中,如果很多模块都要使用同一个变量,此时如果把该变量放入单例类,则所有访问该变量的调用变得很容易,否则,只能通过一个模块传递给另外一个模块,这样增加了风险和复杂度
第三、创建单例模式的基本步骤
1.声明一个单例对象的静态实例,并初始化为nil
2.声明一个类的工厂方法,生成一个该类的实例,并且只会生成一个
3.覆盖allcoWithZone方法,确保用户在alloc 时,不会产生一个多余的对象
4.实现NSCopying协议,覆盖release,autorelease,retain,retainCount方法,以确保只有一个实例化对象
5.在多线程的环境中,注意使用@synchronized关键字

static MyClass *class = nil;
@implementation MyClass

+(MyClass *)sharedMyClass{
    @synchronized (self){//为了确保多线程情况下,仍然确保实体的唯一性
        if (!class) {
            [[self alloc] init];//非ARC模式下,该方法会调用 allocWithZone
        }
        return class;
    } 
}

+(id)allocWithZone:(NSZone *)zone{
    @synchronized(self){
        if (!class) {
            class = [super allocWithZone:zone]; //确保使用同一块内存地址
            return class;
        }
        return nil;
    } 
}

-(id)init; {
    @synchronized(self) {
        if (self = [super init]){
            return self;
       }
        return nil;
    } 
}

-(id)copyWithZone:(NSZone *)zone;{
    return self; //确保copy对象也是唯一
}

-(id)retain{
    return self; //确保计数唯一
}

-(unsigned)retainCount
{
    return UINT_MAX;  //装逼用的,这样打印出来的计数永远为-1
}

-(id)autorelease
{
    return self;//确保计数唯一
} 

-(oneway void)release
{
    //重写计数释放方法
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值