http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 2786|回复: 4

[语法] iOS中单例模式的使用

[复制链接]
发表于 2018-12-13 16:10:24 | 显示全部楼层 |阅读模式
本帖最后由 竹林风 于 2018-12-12 16:38 编辑


单例模式的概念


简单的来说,一个单例类,在整个程序中只有一个实例,并且提供一个类方法供全局调用,在编译时初始化这个类,然后一直保存在内存中,到程序(APP)退出时由系统自动释放这部分内存。


在iOS系统中,下面这些类使用的就是单例模式


  • UIApplication (应用程序实例类)
  • NSNotificationCenter (消息中心类)
  • NSFileManager (文件管理类)
  • NSUserDefaults (应用程序设置)
  • NSURLCache (请求缓存类)
  • NSHTTPCookieStorage (应用程序cookies池)


这些就是系统为数我们提供的一些单例类

在开发中哪些情况我们会用到单例模式呢?


一般我个人在开发中,一些经常调用的类,如工具类,公共跳转类等,,我都会使用单例模式。


单例模式的生命周期是怎样的呢?

下面是程序中不同变量在手机存储器中的位置


1.   临时变量(由编译器管理自动创建/分配/释放的,栈中的内存被调用时处于存储空间中,调用完毕后由系统系统自动释放内存)
2.堆     通过alloc、calloc、malloc或new申请内存,由开发者手动在调用之后通过free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存,在ARC模式下,由系统自动管理。

3.全局区域   静态变量(编译时分配,APP结束时由系统释放)

4.常量   [backcolor=rgba(181, 181, 181, 0.1)]常量(编译时分配,APP结束时由系统释放)

5.代码区    存放代码


在程序中,一个单例类在程序中只能初始化一次,为了保证在使用中始终都是存在的,所以单例是在存储器的全局区域,在编译时分配内存,只要程序还在运行就会一直占用内存,在APP结束后由系统释放这部分内存内存。

新建一个单例

考虑数据和线程问题,苹果官方推荐开发者使用dispatch_once_t来创建单例,那么我就采用dispatch_once_t方法来创建一个单例,类名为MySqlite


[Objective-C] 纯文本查看 复制代码
+(instancetype)shareMySqlite{
    static MySqlite *mySqlite;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        mySqlite = [[MySqlite alloc] init];
    });
    return mySqlite;
}


单例模式的优缺点:

a 优点

(1)、在整个程序中只会实例化一次,所以在程序如果出了问题,可以快速的定位问题所在;
(2)、由于在整个程序中只存在一个对象,节省了系统内存资源,提高了程序的运行效率;


b 缺点

(1)不能被继承,不能有子类;
(2)不易被重写或扩展(可以使用分类);
(3)同时,由于单例对象只要程序在运行中就会一直占用系统内存,该对象在闲置时并不能销毁,在闲置时也消耗了系统内存资源;

单例使用

[MySqlite shareMySqlite] 这样我们就获得了这个单例类,可直接调用类里的变量和方法。






1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2018-12-13 16:26:44 | 显示全部楼层
我只是路过打酱油的。
发表于 2018-12-13 18:40:38 | 显示全部楼层
强烈支持楼主ing……
发表于 2018-12-13 20:02:02 | 显示全部楼层
看到这帖子真是高兴!
发表于 2018-12-15 14:03:23 | 显示全部楼层
真是难得给力的帖子啊。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-22 11:33

© 2014-2021

快速回复 返回顶部 返回列表