OC基础-07.单例实现原理(模拟UI Application单例)
2015-07-28 20:57
567 查看
1.单例概述
如果一个类在整个程序运行过程中只需要创建一次,且每次调用都指向同一块内存空间,那么我们称这个类是单例(例如UI Application,播放器实例等等)2.单例实现原理(代码)
创建一个Person类#import <Foundation/Foundation.h> @interface Person : NSObject +(instancetype)sharedPerson; @end #import "Person.h" /** * 模仿苹果制作单例对象 */ static Person *p = nil;// 定义全局变量 @implementation Person //程序启动时就马上创建一个person // load:方法 // 作用:加载类到内存 // 什么时候调用:程序一启动就会加载类到内存(在main函数执行之前) // 只会调用一次:类只需要加载一次 +(void)load{ [self sharedPerson]; } // 获取单例类方法 +(instancetype)sharedPerson{ static dispatch_once_t once_t; // 代码块中的内容只会执行一次 dispatch_once(&once_t, ^{ p = [[self alloc] init]; }); return p; } // 重写alloc方法 +(instancetype)alloc{ if (p) {// 若是p有值就抛出异常 // 创建异常对象 NSException *exce = [NSException exceptionWithName:@"NSInternalInconsistencyException" reason:@"There can only be one Person instance." userInfo:nil]; // 抛出异常 [exce raise]; } return [super alloc]; } @end
获取Person实例对象,必须使用sharedPerson类方法,使用allocl方法会直接报错
相关文章推荐
- iOS前期OC训练OC_10Block
- Objective-C中的加号与减号
- iOS新特性页面制作
- Cocos2d-JS项目之二:cocostudio基础控件的使用
- iOS前期OC训练OC_08,09内存管理
- IOS开发—NSTimer
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- iOS前期OC训练OC_TimeCode
- Android 时间显示问题
- 【Cocos2d-js教程】cocos2d-js 富文本 RichText
- iOS 统一定制导航栏的 appearance 方法
- iOS前期OC训练OC_07类的扩展
- Android SDK及环境配置
- iOS操作小整理
- Android开机第一个Launcher
- Android三种实现自定义ProgressBar的方式介绍
- iOS property 参数
- [Unity3D]Unity3D叙利亚NGUI血液和技能的冷却效果
- ios学习(block)
- Android开发的基础知识点