美文网首页
iOS • 记——MRC和ARC环境下的单例模式对比

iOS • 记——MRC和ARC环境下的单例模式对比

作者: 行走的苹果哥 | 来源:发表于2016-12-15 17:35 被阅读45次

    单例模式是程序开发中一种设计模式,是前人在多年开发经验中,总结出来的一套有助于提高开发效率的方法。

    单例模式的作用:保证在程序运行过程中,一个类只有一个实例,而且该实例易于供外界访问。从而方便地控制了实例个数,并节约系统资源。

    应用场合:在整个应用程序中,共享一份资源。

    我们通过例子来看看,利用touchBegan方法,创建几个对象,要使用单例模式,需要重写系统alloc方法。

    ARC环境下:

    1、先创建一个对象ZZHTool,定义一个全局变量instance,在allocWithZone方法中,重写alloc方法。为了防止多线程安全访问问题,可以使用互斥锁或者GCD的一次性代码。如下所示:

    2、提供类方法,好处就是方便访问,标明身份,一般的命名规范:share+名字,为了严谨,还会重写copy和mutablecopy方法,但得先遵守NSCopying和NSMutableCopying两个协议。如下所示:

    3、我们在控制器中,在touchBegan方法中使用单例,如下所示:

    我们发现,使用单例模式创建对象之后,打印出来的每个对象的地址都是一样的,所有的对象共享一份资源。

    MRC环境下:

    现在用MRC环境下来写单例模式,首先先把环境更改过来,如图:

    控制器中的代码不变,依然创建几个对象,代码如图:

    3、依然创建一个ZZHTool的对象,在里面重写方法。

    由于MRC环境下,我们需要手动内存管理,由于单例模式是共享一份资源,所以,不能在控制器直接对对象进行release或者retain,需要在单例中重写release和retain方法,代码如图:

    在非ARC环境下,retainCount一般都直接返回MAXFLOAT。

    4、最后打印出来的结果,依然是一样的地址。

    总结:现在iOS开发都是在ARC环境下进行,但在面试中或者在一些比较旧的项目,可能还会碰到MRC的问题,需要我们去多方面的了解,才能够更好的解决问题!

    相关文章

      网友评论

          本文标题:iOS • 记——MRC和ARC环境下的单例模式对比

          本文链接:https://www.haomeiwen.com/subject/xljgmttx.html