您的位置:首页 > 移动开发

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方法会直接报错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: