• iOS开发多线程篇—单例模式(ARC)


    iOS开发多线程篇—单例模式(ARC)

    一、简单说明:

    设计模式:多年软件开发,总结出来的一套经验、方法和工具

    java中有23种设计模式,在ios中最常用的是单例模式和代理模式。

    二、单例模式说明

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

    (2)单例模式的使用场合:在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次),应该让这个类创建出来的对象永远只有一个。

    (3)单例模式在ARCMRC环境下的写法有所不同,需要编写2套不同的代码

    可以用宏判断是否为ARC环境



    (4)在ARC中,单例模式的实现思路

    在.m中保留一个全局的static的实例   static id _instance;

    1)重写allocWithZone:方法,在这里创建唯一的实例(注意线程安全)



    2)提供1个类方法让外界访问唯一的实例



    3)实现copyWithZone:方法



    (5)非ARC中(MRC),单例模式的实现(比ARC多了几个步骤)

    实现内存管理方法

    - (id)retain { return self; }

    - (NSUInteger)retainCount { return 1; }

    - (oneway void)release {}

    - (id)autorelease { return self; }

    三、单例模式(ARC)

    1.说明

    重写allocWithzone:方法,控制内存分配。因为alloc内部会调用该方法,每次调用allocWithzone:方法,系统都会创建一块新的内存空间。

    alloc方法中:永远只分配一次内存

    init方法中:保证所有的MP3数据都只加载一次。

    2.代码示例

    创建一个音频工具类,继承子NSObject类。

    在该类中实现以下代码,观察:



    在主控制器中,创建工具类对象:

     

    打印结果:

    说明:在alloc内部会调用更底层的方法allocWithZone方法分配内存空间,上面的代码创建了四个不同的对象。

    3.单例模式:设计思路

    (1)永远只分配一块内存来创建对象

    (2)提供一个类方法,返回内部唯一的一个变量

    (3)最好保证init方法也只初始化一次

    代码示例:

    创建一个音频工具类,继承子NSObject类。

    在该类中按照设计思路实现以下代码:

    YYAudioTool.m文件




    YYAudioTool.h文件



    主控制器中创建对象:

     

    观察打印结果:

      

    说明:整个程序中只创建一个对象实例。

    4.static补充:

    注意:static id instace=nil;和static id instace;instace=nil;的区别

  • 相关阅读:
    Ubuntu 14.04 卸载通过源码安装的库
    Ubuntu 14.04 indigo 相关依赖
    Ubuntu 14.04 indigo 安装 cartographer 1.0.0
    Ubuntu 14.04 改变文件或者文件夹的拥有者
    安装cartographer遇到Unrecognized syntax identifier "proto3". This parser only recognizes "proto2"问题
    Unrecognized syntax identifier "proto3". This parser only recognizes "proto2". ”问题解决方法
    查看所有用户组,用户名
    1卸载ROS
    Ubuntu14.04 软件安装卸载
    Ubuntu14.04系统显示器不自动休眠修改
  • 原文地址:https://www.cnblogs.com/496668219long/p/4507407.html
Copyright © 2020-2023  润新知