iOS-单例模式(懒汉式和饿汉式)和GCD实现
2015-10-03 14:30
393 查看
// // HMMusicTool.h // 03-单例模式-Singleton(掌握) // // Created by apple on 14-9-16. // Copyright (c) 2014年 heima. All rights reserved. // 播放音乐 #import <Foundation/Foundation.h> @interface HMMusicTool : NSObject + (instancetype)sharedMusicTool; @end
// // HMMusicTool.m // 03-单例模式-Singleton(掌握) // // Created by apple on 14-9-16. // Copyright (c) 2014年 heima. All rights reserved. // 懒汉式 #import "HMMusicTool.h" @implementation HMMusicTool static id _instance; /** * alloc方法内部会调用这个方法 */ + (id)allocWithZone:(struct _NSZone *)zone { if (_instance == nil) { // 防止频繁加锁 @synchronized(self) { if (_instance == nil) { // 防止创建多次 _instance = [super allocWithZone:zone]; } } } return _instance; } + (instancetype)sharedMusicTool { if (_instance == nil) { // 防止频繁加锁 @synchronized(self) { if (_instance == nil) { // 防止创建多次 _instance = [[self alloc] init]; } } } return _instance; } - (id)copyWithZone:(NSZone *)zone { return _instance; } @end
// // HMDataTool.h // 03-单例模式-Singleton(掌握) // // Created by apple on 14-9-16. // Copyright (c) 2014年 heima. All rights reserved. // #import <Foundation/Foundation.h> @interface HMDataTool : NSObject + (instancetype)sharedDataTool; @end // // HMDataTool.m // 03-单例模式-Singleton(掌握) // // Created by apple on 14-9-16. // Copyright (c) 2014年 heima. All rights reserved. // #import "HMDataTool.h" @implementation HMDataTool // 用来保存唯一的单例对象 static id _instace; + (id)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace = [super allocWithZone:zone]; }); return _instace; } + (instancetype)sharedDataTool { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace = [[self alloc] init]; }); return _instace; } - (id)copyWithZone:(NSZone *)zone { return _instace; } @end
相关文章推荐
- iOS经常使用类别
- Navigation自定义
- iOS中按钮不响应的解决方法
- IOS 中block 的声明和使用
- ios 开发学习 :多线程之GCD的使用指南
- iOS—修改AFNetworking源文件可接收text/html的方法
- 1.1.2 BIOS在内存中加载中断向量表和中断服务程序
- 1.1.1 BIOS的启动原理
- 1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序
- BIOS的入口地址0xFFFF0
- iOS开发优化tableView滑动流畅性的集中常用方法
- 2015/10/2 iOS笔记 细节
- 设置tableview的滚动范围--iOS开发系列---项目中成长的知识三
- 当数据量很少的时候,tableview会显示多余的cell--iOS开发系列---项目中成长的知识二
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #5
- 把所有界面的状态栏字体颜色设置为白色--iOS开发系列---项目中成长的知识一
- iOS开发遇到的坑之四--图片命名不规范
- IOS开发笔记-01按钮操作-08.git的简单使用
- iOS 中获得键盘的弹出和隐藏
- ios 多线程-GCD-NSOperation