IOS开发基础之单例模式


各种编程语言都有单例模式。起初23设计模式是来自C++总结设计出来的。其他编程语言陆续也出来了。
直接上源码。为了方便起见,打印日志我也放到源码里面了。

//
//  ViewController.m
//  22-单例模式
//
//  Created by 鲁军 on 2021/2/17.
//#import "ViewController.h"
#import "NetworkTools.h"
@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.NetworkTools *t12 = [NetworkTools sharedNetworkTools];NetworkTools *t1 = [NetworkTools sharedNetworkToolsOnce];NetworkTools *t2 = [NetworkTools sharedNetworkToolsOnce];NSLog(@"%@",t1);NSLog(@"%@",t2);//打印地址//2021-02-17 23:06:32.364581+0800 22-单例模式[3109:136705] <NetworkTools: 0x600003568140>
//    2021-02-17 23:06:32.365020+0800 22-单例模式[3109:136705] <NetworkTools: 0x600003568140>[self testBeginAndEndTimeSynchronized];[self testBeginAndEndTimeOne];
//    2021-02-17 23:11:33.338995+0800 22-单例模式[3237:141283] 加锁 0.001164
//    2021-02-17 23:11:33.339635+0800 22-单例模式[3237:141283] One 0.000389}//测试加锁的 创建时间
-(void)testBeginAndEndTimeSynchronized{CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();for(int i=0;i<10000;i++){[NetworkTools sharedNetworkTools];}CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();NSLog(@"加锁 %lf",end-start);}//测试Once的时间
-(void)testBeginAndEndTimeOne{CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();for(int i=0;i<10000;i++){[NetworkTools sharedNetworkToolsOnce];}CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();NSLog(@"One %lf",end-start);
}
@end
//
//  NetworkTools.h
//  22-单例模式
//
//  Created by 鲁军 on 2021/2/17.
//#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface NetworkTools : NSObject+(instancetype)sharedNetworkTools;+(instancetype)sharedNetworkToolsOnce;@endNS_ASSUME_NONNULL_END
//
//  NetworkTools.m
//  22-单例模式
//
//  Created by 鲁军 on 2021/2/17.
//#import "NetworkTools.h"@implementation NetworkTools+(instancetype)sharedNetworkTools{//static id instance = nil;//线程同步,保证线程安全。 加锁@synchronized (self) {if(instance==nil){instance = [[self alloc] init];}}return  instance;}+(instancetype)sharedNetworkToolsOnce{static id instance = nil;//dispatch_once 线程安全的 性能高static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{if(instance==nil){instance = [[self alloc] init];}});return  instance;
}@end

IOS开发基础之单例模式相关推荐

  1. iOS开发基础知识--碎片44

    iOS开发基础知识--碎片44  iOS开发基础知识--碎片44 1:App跳转至系统Settings 跳转在IOS8以上跟以下是有区别的,如果是IOS8以上可以如下设置: NSURL *url = ...

  2. iOS开发基础-九宫格坐标(4)

    对iOS开发基础-九宫格坐标(3)的代码进行进一步优化. 新建一个 UIView 的子类,并命名为 WJQAppView ,将 appxib.xib 中的 UIView 对象与新建的视图类进行关联. ...

  3. IOS开发基础之OC的Block入门_Day09-Block

    IOS开发基础之OC的Block入门_Day09-Block block是oc的重要的基础知识,重点之重.跟协议一样重要,是进行函数回调重要手段.在后续的UI学习具有举足轻重的地位.学会基础的bloc ...

  4. IOS开发基础之音频工具类封装AVAudioPlayer

    IOS开发基础之音频工具类封装AVAudioPlayer 源码在我的主页下面 ,项目名称是AVAudioPlayer 关键性代码 工具类的封装 // // LJAudioTool.h // AVAud ...

  5. IOS开发基础之微博项目第1天-OC版

    IOS开发基础之微博项目第1天-OC版 纯代码创建的项目,具有参考价值 该资料来自2014年7月3号,虽然时间过去较长,但是oc和swift不同,oc语法迭代更新慢 具有一定的参考意义 涉及xib加载 ...

  6. IOS开发基础之网易新闻UICollectionView的使用第3天

    IOS开发基础之网易新闻UICollectionView的使用第3天 由于第3天的UICollectionView 并不实现,我查阅相关资料,也没解决,先从本地的plist加载的数据,不是网络的上的数 ...

  7. IOS开发基础之网易新闻JSON转模型数组第2天

    IOS开发基础之网易新闻JSON转模型数组第2天 // // HMHeadline.h // 01-网易新闻搭建 // // Created by 鲁军 on 2021/4/11. //#import ...

  8. IOS开发基础之网易新闻环境搭建异步请求json,AFN网络封装第1天

    IOS开发基础之网易新闻环境搭建异步请求json,AFN网络封装第1天 视频资料是2015年的,但是AFN是导入框架的关键文件,我尝试使用cocoapods安装最新的AFN,虽然成功了,但是版本太高, ...

  9. IOS开发基础之模拟科技头条项目案例32

    IOS开发基础之模拟科技头条项目案例32 说说这个项目的技术要点核心 ,首先是异步网络请求,block的回调,sdWebImage的使用.各个控件的使用,NSDate日期的转换.自动适配屏幕工作,模型 ...

最新文章

  1. 在失败中学习,MIT新研究显示,机器可以像婴儿一样学会理解人类目标
  2. python队列在进程传递_Python 进程队列
  3. java的八种数据类型_JAVA 的8种基本数据类型
  4. ts获取服务器数据_怎么使用Satruts2实现页面列表数据导出到Excel表格
  5. Luogu 4755 Beautiful Pair
  6. map写法 scala语言_(转)scala中map与flatMap浅析
  7. UML顺序图/序列图/时序图
  8. Adobe Illustrator的教程:如何建立扁平化设计角色动画
  9. 刘汝佳算法竞赛入门经典 第二单元习题答案自编
  10. css 对话框 水平居中,css 水平居中的几种方法
  11. 132.分割回文串II
  12. springboot的if else过多解决方案
  13. 【复旦微】国产MCU学习(持续更新)
  14. 电能终端服务器,抄表终端服务器设置教程
  15. 基于单片机门电路测试
  16. Verilog基础知识-——计数器设计以及任意分频设计与modelsim仿真
  17. Nemty 勒索软件代码中包含对杀毒软件公司的强烈措辞
  18. 【学习】关于网站中图片的各类交互
  19. 使用CSS设置重叠层次
  20. 10-199 C2-1修改订单运费

热门文章

  1. php科学计算库,科学计算库numpy基础
  2. 哈罗单车怎么关锁还车_好象被哈罗单车套路了,提醒大家小心
  3. iis下的php不显示报错信息,IIS环境下 PHP无法显示错误信息怎么办
  4. c++图形中如何判断鼠标点击在一条直线上_中考数学常考题型精讲精练系列:函数图象上点的存在性问题中的距离与面积...
  5. java xor_java 简单xor加密
  6. access查找工龄大于30_ACCESS查询操作题完整
  7. java io 流选择题_java Io流面试题和选择题
  8. python多线程共享全局变量_Python多线程-共享全局变量
  9. html火影忍者网页设计作品,纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例...
  10. mysql innodb启动失败_mysql启动失败