单例模式:单例类的标准写法 - iOS - UI基础知识总结13
来源:互联网 发布:mac 搜狗不能使用 编辑:程序博客网 时间:2024/06/06 20:08
IOS单例模式(Singleton)
单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
1.单例模式的要点:
显然单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
2.单例模式的优点:
1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
IOS中的单例模式
在objective-c中要实现一个单例类,至少需要做以下四个步骤:
1、为单例对象实现一个静态实例,并初始化,然后设置成nil,
2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,
3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实例的时候不产生一个新实例,
4、适当实现allocWitheZone,copyWithZone,release和autorelease等方法。
1、为单例对象实现一个静态实例,并初始化,然后设置成nil,
2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,
3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实例的时候不产生一个新实例,
4、适当实现allocWitheZone,copyWithZone,release和autorelease等方法。
下面以SingleData为例子,详细介绍单例类的创建方法:
先在.h中声明对象的创建方法(如果该类有存储数据的变量,还要写出对应的存储、修改、删除数据的方法)
在.m中实现对象的创建方法
先在.h中声明对象的创建方法(如果该类有存储数据的变量,还要写出对应的存储、修改、删除数据的方法)
#import <Foundation/Foundation.h>@interface SingleData : NSObject+ (SingleData *)shareSingleData;@end
在.m中实现对象的创建方法
#import "SingleData.h"// 该类单例对象的唯一指针static SingleData *instance = nil;@implementation SingleData<span style="color:#FF0000;">// 实现单例类的类方法(自己声明的方法)</span>+ (SingleData *)shareSingleData{ // 如果是第一次创建,instance必然为空,这时创建单例对象,否则直接返回指针地址(保证单例地址的唯一性) if (nil == instance) { instance = [[SingleData alloc]init]; } return instance;// 不管是第几次用这个方法,只会返回第一次生成的空间地址}<span style="color:#FF0000;">// 如果该单例有一些需要初始化的变量,重写init方法实现</span>- (instancetype)init{ if (self = [super init]) { // 这里往往放一些要初始化的变量,比如单例对象具有一个字典属性,那么就要在此处初始化 }; return self;}<span style="color:#FF0000;">// 该类自带的alloc方法</span>+ (instancetype)allocWithZone:(struct _NSZone *)zone{ if (nil == instance) { instance = [super allocWithZone:zone]; } return instance;// 不管是第几次用这个方法,只会返回第一次生成的空间地址}<span style="color:#FF0000;">// 对象遵守copying协议的时候,防止生成新空间</span>- (id)copyWithZone:(NSZone *)zone{ return self;}// 重写copy方法,让外界在对该类进行copy的时候,不产生新的空间范围,直接返回原有的空间首地址- (id)copy{ return self;}// 当别人对这块唯一的内存空间进行retain操作时,让该操作不起作用- (instancetype)retain{ return self;}// 重写release方法// 保证外界对该类的唯一一个势力对象进行release操作的时候,不让该对象被释放掉// oneway 主要针对在多线程环境下,单向执行,没有“回滚”操作- (oneway void)release{ }// 重写autorelease方法- (instancetype)autorelease{ return self;}// 当外界访问这块空间的retainCount值的时候,返回一个-1或者2^64-1// 其实就是在间接的告诉访问者,这块空间不属于你的管理范围- (NSUInteger)retainCount{ return NSUIntegerMax;}@end
0 0
- 单例模式:单例类的标准写法 - iOS - UI基础知识总结13
- iOS 标准单例的写法
- iOS 单例的标准写法
- ios 单例模式的写法
- ios 单例模式的写法
- IOS 单例模式的写法
- iOS单例模式的官方写法
- iOS 单例模式的写法
- iOS 单例模式的写法
- iOS方法--------单例模式的写法
- 单例模式的各种写法总结
- iOS单例模式和单例的写法
- iOS 单例模式的介绍和写法
- iOS两种官方的单例模式写法
- iOS开发之单例模式的写法
- ios单例模式的几种写法
- iOS开发单例模式的官方写法
- 单例模式的写法
- 关于 内存对齐 && sizeof 的介绍 1——联合体
- Java程序的运行
- C语言基础:结构体
- Codeforces 549E Sasha Circle
- fsdfsdfsdf
- 单例模式:单例类的标准写法 - iOS - UI基础知识总结13
- 赚大钱才能爱一场。
- C语言基础:函数(Function)
- 大话数据结构—散列表查找(哈希表)
- 关于 内存对齐 && sizeof 的介绍 2 —— 结构体(改)
- linux 的fork 和 vfork
- C语言基础:初级指针
- 1-接口测试的背景
- DIY一个局域网聊天的小程序-油聊