黑马程序员————IOS学习笔记 第12篇 关于单例设计模式的认识
来源:互联网 发布:用ps做淘宝产品图片 编辑:程序博客网 时间:2024/05/21 08:00
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
今天在准备入学考试,发现了一个不清楚的概念:单例设计模式,因此上网查了一些资料并且整理,又学到了新的知识。
单例模式常用在只需要一个实例的类的情况下,即这个类只能有一个实例对象。单例模式可以减少内存资源的浪费,而且方便外界的访问。单例模式保证一个类仅有一个实例,并且提供一个访问它的全局访问点。在jave和oc开发中都有这种模式。举一个例子来说明单例模式的动机,如在Windows下打开任务管理器时只能打开一个该窗口,则就需要将该窗口对象采用单例模式才能实现,这种机制可以防止多个窗口打开,防止内存浪费和混乱任务管理器的管理原则。
单例设计的三个关键:
一是单例模式的类只提供私有的构造函数,
二是类定义中含有一个该类的静态私有对象,
三是该类提供了一个静态的共有的函数用于创建或获取它本身的静态私有对象
下面是在网上找的一个代码实现:
user.h
#import <Foundation/Foundation.h>
@interface User : NSObject<NSCopying> //拷贝协议表明该对象可被拷贝,尽管都是同一个(因为是单例)@property(nonatomic,copy) NSString *name;@property(nonatomic,copy) NSString *email;//一般用share或者default做前缀,易于阅读标记为单例共享方法+(id)shareUser;@end
user.m
#import "User.h"static User *user1=nil; //先定义一个空得静态实例, 关键一@implementation User+(id)shareUser{ @synchronized(self){ //线程锁,防止多线程访问冲突 if (user1==nil) { //判断这个实例是否为空,即是否已被创建 user1=[[[self class ]alloc]init];//如果没被创建,就初始化一个 关键二 } } return user1; //如果已存在,则不创建,直接返回即可}
<span style="font-family: Arial, Helvetica, sans-serif;">//关键三 这是在非ARC下的要做到的防止创建多个对象 </span>
//以下都是防止实例不是唯一的一些方法,是通用格式,不必死记硬背,可以直接拷贝到任何单例模式中//这是在调用alloc时可防止重复创建实例+(id)allocWithZone:(NSZone *)zone{ if (user1==nil) { user1=[super allocWithZone:zone]; } return user1;}//这是在拷贝对象时防止重复创建-(id)copyWithZone:(NSZone *)zone{ return user1;}//这是在retain对象时防止重复创建,当然在ARC开启时可省略这个-(id)retain{ return user1;}//在release时什么都不做,因为一共就一个实例,不重复引用,所以不能release-(oneway void)release{ }//在autorelease时,返回实例,在ARC下客省略-(void)autorelease{ return user1;}//返回的时无符号整型,即大于0的数字,在ARC下可省略-(NSUInteger)retainCount{ return UINT_MAX;}@endmain.m
#import <Foundation/Foundation.h>#import "User.h"int main(int argc, const char * argv[]){ @autoreleasepool { User *user1=[User shareUser]; User *user2=[User shareUser]; User *user3=[[User alloc]init]; User *user4=[user1 copy]; NSLog(@"%@,%@,%@,%@",user1,user2,user3,user4); } return 0;}
如果这个实例模型成功那么最后user1,user2,user3,user4 的地址是一样的地址。
0 0
- 黑马程序员————IOS学习笔记 第12篇 关于单例设计模式的认识
- 黑马程序员学习笔记——单例设计模式
- 黑马程序员————IOS学习笔记 第9篇 block 、protocol的认识
- 黑马程序员—java基础学习--单例设计模式
- 黑马程序员—单例设计模式
- 黑马程序员—单例设计模式
- 黑马程序员—单例设计模式
- 黑马程序员 学习笔记——Java 二十三设计模式之单例
- 黑马程序员 JAVA学习笔记——java基础 单例设计模式
- 黑马程序员——单例模式学习笔记
- 黑马程序员——ios学习笔记 OC 初步认识
- 黑马程序员—单例模式的设计
- 黑马程序员--设计模式——单例设计模式
- 黑马程序员——黑马学习日志之六 静态,单例设计模式,继承,多态
- 黑马程序员 Java的设计模式——单例设计模式
- 黑马程序员———单例设计模式-懒汉式关于线程安全以及要点
- 黑马程序员————单例设计模式
- 黑马程序员———java 单例设计模式
- Build and use dylib on iOS
- Android实现任务管理器
- js时间加减
- CornerStone配置SVN,HTTP及SVN简单教程
- Android开发之倒计时应用(三)
- 黑马程序员————IOS学习笔记 第12篇 关于单例设计模式的认识
- R语言多元统计分析初探
- 【ac自动机】uva11468 Substring && uva11019 Matrix Matcher
- 2阶段算法学习 。。
- android开发之相关的Blog推荐——跟随大神的脚步才能成长为大神
- Openssl验证证书的有效性
- 报表查询sql,分组后汇总数量和计算总额
- OnClick OnClientClick OnServerCick 的区别与使用
- 2182(线段树)