ios之单例模式

单例模式是iOS开发中非常重要的一种模式,一般用在只允许创建一个变量的地方,什么地方只允许创建一个变量呢?例如手机上的硬件对象:相机、GPS、蓝牙等。如果要使用这些硬件对象,就只能共享一个资源。。。千万不要以为这些硬件对象可以多次alloc出来,当成多个对象来使用,那是不可能的,因为这些硬件只有一个。这种情况下就需要用到单例模式了,创建单例模式的方法有很多种,ios4前后是不一样的,在这里我用一种最简单、易懂的方法,也就是通过GCD的方式来创建单例模式。

分为三步来创建:

第一步:

创建一个共享实例的静态变量

使用静态变量可以使这个实例能够在程序生命周期内一直存活,提供给程序使用,当然你也可以用全局变量来代替静态变量,但还是建议最好使用静态变量,防止文件导入时

命名冲突。

第二步:

创建shareInstance方法来实现单例

dispatch_once的作用时确保block里面的函数只执行一次,并保证了多线程访问时的安全性,这点在多线程的情况非常重要,因为继续有所程序都是多线程运行的,因此确保多线程访问安全是很有必要的。这里注意红线部分画出的super,千万不要用self啊,否则会造成循环引用,程序卡死,不信自己可以试试。(也不要将allocWithZone换成alloc,因为allocWithZone是和下面重写的方法对应的

下面重写两个方法即可:

重写的第一个方法是为了防止如果使用alloc和init方法来创建了一个对象,造成单例被分配了多个不同的内存空间,这是不允许发生的。

重写的第二个方法,是为了防止使用copy时复制对象造成单例又被多次分配,当然一般情况下这个函数用不着,你也可以不重写。但第一个必须重写!

到此为止,单例模式就写好了,下面来开看看打印结果:

内存地址空间都是一样的吧。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值