Objective-c 单例设计模式
Objective-c 单例设计模式
三、单例设计模式的要点:(1) 某个类只能有一个实例。 (2)他必须自行创建这个对象 (3)必须自行向整个系统提供这个实例; (4)为了保证实例的唯一性,我们必须将 -(id)copyWithZone:(NSZone *)zone 、+(id)allocWithZone:(NSZone *)zone、 -(id)retain、 -(NSUInteger)retainCount 、-(oneway void)release
@interface Bee : NSObject<NSCopying>//注意此处调用了NScoping协议
+(Bee *)shareIsrance;//此处定义了一个工厂方法,用工厂方法来限制实例化过程(下文中将会提到)
@end //调用NScoping协议,从而在实现文件中覆盖
在实现文件中实现如下:
#import "Bee.h"
@implementation Bee
static Bee *sharesingleton=nil;//必须声明为一个静态方法
+(Bee *)shareIstance
{
if (sharesingleton == nil) {//检查唯一实例是否创建
sharesingleton = [[super allocWithZone:NULL] init ];
// 这里不是使用alloc,而是调用[[super allocWithZone:NULL] init ] ,为什么是super而不是self呢? 这是因为已经在self中冲在了基本对象的分配方法,所以需要借用父类的(NSobject)的功能帮助处理底层内存分配的杂务;
}
return sharesingleton;
}
// 覆盖NSObject方法
+(id)allocWithZone:(NSZone *)zone
{
return [[self shareIstance] retain];
}
-(id)copyWithZone:(NSZone *)zone
{
return self;//覆盖父类 NScoping 中的方法
}
-(id)retain
{
return self;
}
-(NSUInteger)retainCount
{
return NSUIntegerMax;//无穷大的数,表示不能释放
}
-(oneway void)release
{
//什么也不做
}
-(id)autorelease
{
return self;
}
@end
注意:所谓单例,即我们自己创建一个单例类,该类只能生成唯一的对象,即用 if (sharesingleton == nil) 方法来保证唯一性,为了防止该对象被复制(copy)或者retain 和 release 等操作,我们必须在所创建的单例的实现文件( .m 文件)中将父类的这些方法给覆盖,该目的是为了保证单例模式的一个严谨性。
Objective-c 单例设计模式的更多相关文章
- 【iOS 单例设计模式】底层解析与运用
[iOS 单例设计模式]底层解析与运用 一.单例设计名词解释: (官方解释)单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例.(形象比喻)程序 — 公司 单例实例 - 管理 ...
- 单例设计模式全局缓存accessToken
使用微信JS-SDK开发的小伙伴们,看文档经常会看到这样一句话:(下面是微信开发文档的一部分原话截图) 这句话就是:开发者必须在自己的服务全局缓存access_token,jsapi_ticket 下 ...
- java 单例设计模式
1.饿汉单例设计模式: 步骤 : 1.定义一个私有的静态成员变量来引用对象(私有的静态对象),设置对象唯一. 2.私有化构造方法,防止new对象. 3.创建一个公开的静态方法,返回上面的 ...
- iOS开发之单例设计模式(完整正确版本)
单例的意思从字面上就可以略知一二,所谓单例就是确保在程序运行过程中只创建一个对象实例.可以用于需要被多次广泛或者说多次使用的资源中,比如我们常见的网络请求类.工具类以及其它管理类等.比如我iOS开发中 ...
- GOF设计模式之1:单例设计模式
1.单例设计模式核心作用: 保证一个类只有一个实例,并且提供了访问该实例的全局访问点 2.常见应用场景: window的任务管理器 项目中读取配置文件一般也是一个单例模式 数据库连接池的设计也是采用单 ...
- Java学习笔记——单例设计模式Singleton
单例设计模式:singleton 解决的问题: 确保程序在运行过程中,某个类的实例instance只有一份. 特点: 1 构造函数私有化 2 自己内部声明自己 3 提供一个public方法,负责实例化 ...
- Java笔记(十一)……单例设计模式
设计模式 解决某一类问题最行之有效的方法 Java中有23中设计模式 单例设计模式 解决一个类在内存中只存在一个对象 思路 将构造函数私有化 在类中创建一个本类对象 提供一个方法可以获取到对象 两种方 ...
- java的单例设计模式
java的单例设计模式包括:饿汉设计模式和懒汉设计模式: 步骤: 1.创建一个对象把他设置为私有的成员变量,保证唯一 2.私有构造方法,防止new一个对象. 3.定义一个公开的静态方法,返回第一步创建 ...
- OC中的单例设计模式及单例的宏抽取
// 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 #pragma Person.h文件 #i ...
- 初学者学Java设计模式(一)------单例设计模式
单例设计模式 单例设计模式是指一个类只会生成一个对象,优点是他可以确保所有对象都访问唯一实例. 具体实现代码如下: public class A { public static void main(S ...
随机推荐
- PlayMaker Play Sound 和 Audio Play
这两个 Action 都可以播放声音 *Play Sound:只要把声音拖进去就可以: *Audio Play:要求游戏对象要有Audio Source组件.
- Django权限1
1.权限,说白了就是你有资格访问这个网址,而别人每一资格:你有资格进行增删改查,而别人只有查的权限 2.新建是3张表: #用户表 class User(models.Model): name = mo ...
- mac os 和 ubuntu 上测试工具check-0.9.10的安装
由于工作需要,要使用check 这个单元测试工具. 首先,说一说在Mac10.9上面的安装.我是直接在官网(http://check.sourceforge.net)上下载源码包. 1,解压 2,进入 ...
- C#操作Excel报错:服务器出现意外情况。
C#操作Excel表格时,如遇以下错误: 服务器出现意外情况.(异常来自 HRESULT:0x80010105(RPC_E_SERVERFAULT)) 解决方案: 打开你电脑中的Office-Exce ...
- C#获取文件格式图标关联应用程序图标
class SystemIcon { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct SHFIL ...
- Spring课程 Spring入门篇 2-1 IOC和bean容器
课程链接: 本节讲了5部分内容,6为项目demo: 1 接口及面向接口编程 2 什么是IOC 3 Spring的bean配置 4 Bean的初始化 5 Demo 自己理解: 1 高层模块和底层模块都依 ...
- Android Studio修改默认Activity继承AppCompatActivity(转)
在Android Studio中新建Activity默认继承AppCompatActivity,感觉这点十分不爽,找了很久,终于发现在Android Studio安装目录下有个模板文件,修改其中的参数 ...
- Verilog分频器的设计
大三都要结束了,才发现自己太多东西没深入学习. 对于偶分频:(计数到分频数的一半就翻转) 注: 图中只用了一个计数器,当然也可以用多个: 图中只计数到需要分频的一半,当然也可计数到更多: 图中从第一个 ...
- git github添加远程仓库出错 remote origin already exists
在github上建立了仓库后,执行 git remote add origin https://github.com/zhangsan/sample.git时,提示 remote origin alr ...
- MySQL入门很简单: 2 MySQL数据类型
2. MySQL数据类型 2.1 整数类型 后面的是默认显示宽度: tinyint(4) smallint(6) mediumint(9) int(11) bigint(20) 2.2 浮点型和定点数 ...