iOS设计模式(1):单例模式
2014-01-05 22:45
218 查看
单例模式简单又经常被面试提到,所以放在第一位置。
2,在iOS应用整个生命周期中,只需要一个实例。例如:UIAccelerometer类:实时获得重力加速计数据,保持x,y,z轴的状态。这个实例只需要一个实例,多个实例完全没有意义(一台设备还能产生2个加速度?),只会占用内存。
...
首先我们会想到,1,用个if语句判断类是否已经被实例化。如果未被实例化,则实例化。否则直接返回。2,如果单例对象由多个线程访问呢?所有线程安全至关重要。
单例模式一般会封装一个静态属性,并提供静态实例的创建方法。
下面先用GCD实现:
创建一个Singleton类:
Singleton.h:声明一个静态属性,并提供静态实例的创建方法。
Singleton.m
dispatch_once函数:代码只会被运行一次,而且还是线程同步的。所以这里也不需要使用@synchronized。
GCD是基于C语言的多线程访问技术。比较简单又很重要,不熟悉的可以先熟悉下。格式其实也不需要过多记忆,Xcode提供的代码模版也有。
以下是我在公司项目中的一个实现:
单例模式在iOS中的应用
1,UIApplication
2,UIAccelerometer
3,NSUserDefaults:读取应用程序设置项目。
4,NSNotificaionCenter:提供信息广播通知。
5,NSFileManager:提供访问文件系统的通用操作,可以定位、创建、复制文件和文件夹。
6,NSBundle:提供动态加载(或卸载)可执行代码、定位资源文件以及资源本地化、访问文件系统等。
什么是单例模式?
单例,字面意思就是整个应用只能创建或存在一个实例。为什么需要单例模式?
1,整个应用程序只能有一个实例。例如:UIApplication类:当应用程序启动时,应用的状态由UIApplication类的一个实例维护,这个实例代表了整个“应用程序对象”,实现应用程序中的一些共享资源的访问和状态的保持等。2,在iOS应用整个生命周期中,只需要一个实例。例如:UIAccelerometer类:实时获得重力加速计数据,保持x,y,z轴的状态。这个实例只需要一个实例,多个实例完全没有意义(一台设备还能产生2个加速度?),只会占用内存。
...
单例模式的实现原理?
怎么保持只有一个实例呢?首先我们会想到,1,用个if语句判断类是否已经被实例化。如果未被实例化,则实例化。否则直接返回。2,如果单例对象由多个线程访问呢?所有线程安全至关重要。
单例模式一般会封装一个静态属性,并提供静态实例的创建方法。
下面先用GCD实现:
创建一个Singleton类:
Singleton.h:声明一个静态属性,并提供静态实例的创建方法。
@interface Singleton : NSObject @property (nonatomic,strong) NSString *singletonData; +(Singleton *)sharedManager; @end
Singleton.m
@implementation Singleton @synthesize singletonData=_singletonData; //缺省 static Singleton *sharedManager=nil; +(Singleton *)sharedManager{ static dispatch_once_t once; dispatch_once(&once, ^{ sharedManager=[[Singleton alloc] init]; }); return sharedManager; } @end
dispatch_once函数:代码只会被运行一次,而且还是线程同步的。所以这里也不需要使用@synchronized。
GCD是基于C语言的多线程访问技术。比较简单又很重要,不熟悉的可以先熟悉下。格式其实也不需要过多记忆,Xcode提供的代码模版也有。
以下是我在公司项目中的一个实现:
static OpenStatistics *sharedInstace = nil;
+ (OpenStatistics *) sharedInstance { @synchronized (self) { if (sharedInstace == nil) { sharedInstace = [[self alloc] init]; //默认设置 sharedInstace.isCrashReportEnabled = YES; sharedInstace.isLogEnabled = NO; sharedInstace.policy = BATCH; sharedInstace.appVersion = XcodeAppVersion; sharedInstace.channelId = @"App Store"; } return sharedInstace; } }
单例模式在iOS中的应用
1,UIApplication
2,UIAccelerometer
3,NSUserDefaults:读取应用程序设置项目。
4,NSNotificaionCenter:提供信息广播通知。
5,NSFileManager:提供访问文件系统的通用操作,可以定位、创建、复制文件和文件夹。
6,NSBundle:提供动态加载(或卸载)可执行代码、定位资源文件以及资源本地化、访问文件系统等。
相关文章推荐
- iOS 设计模式之工厂模式
- iOS的基本的设计模式
- iOS设计模式 - (3)简单工厂模式
- IOS开发之----单例设计模式
- iOS开发中的几种设计模式
- iOS设计模式之一:MVC模式和单例模式
- iOS 设计模式 - 备忘录模式
- IOS设计模式学习 生成器
- 实例讲解iOS应用的设计模式开发中的Visitor访问者模式
- iOS中常用的几种设计模式
- iOS设计模式之一(MVC模式,单例模式)
- iOS设计模式--工厂模式
- iOS设计模式之—单例模式浅谈
- iOS MVVM设计模式
- ios 开发 设计模式之策略模式
- 如何理解 iOS Delegate (委托)设计模式
- iOS 设计模式MVC
- iOS学习2_代理设计模式
- iOS设计模式之观察者模式
- iOS设计模式之单例模式