• 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;的区别

  • 相关阅读:
    API函数ShellExecute与ShellExecuteEx用法
    C#txt文本分割器
    Python异常处理
    python bs4解析网页时 bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to inst(转)
    gensim中TaggedDocument 怎么使用
    Python读取文件时出现UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position xx: 解决方案
    收集python2代码转python3遇到的问题
    互联网浪潮之下,聊聊 90 后所面临的困境
    互联网公司里都有哪些潜规则?
    大厂程序员的一天是如何度过的?
  • 原文地址:https://www.cnblogs.com/496668219long/p/4507407.html
Copyright © 2020-2023  润新知