单例模式
一.介绍:
单例模式的作用是解决“应用中只有一个实例”的一类问题。在一个ios的生命周期中 有时候我们只需要某个类的一个实例,例如当应用程序启动时,应用的状态有UIApplication类的一个实例维护,这个实例代表了整个“应用程序对象”,它只能是一个实例,其作用是实现应用程序中一些共享资源的访问和状态保持
二.代码展示:
#import <Foundation/Foundation.h>
@interface SingerExample : NSObject
+(SingerExample *)shareManager;
@property(nonatomic,strong)NSString *singerexample;
@end
#import "SingerExample.h"
@implementation SingerExample
@synthesize singerexample = _singerexample;
static SingerExample *Singerexample = nil;
+(SingerExample*)shareManager
{
static dispatch_once_t once;
dispatch_once(&once,^{
Singerexample = [[self alloc]init];
});
return Singerexample;
}
@end
其中static SingerExample *Singerexample是静态变量,类方法为+(SingerExample*)shareManager。shareManager方法采用了GCD(Grand Central Dispatch)技术。这是一种基于C语言的多线程访问技术。上述代码中, dispatch_once就是GCD提供的,它的作用是在真个应用程序生命周期中只执行一次代码块({......})。dispatch_once函数能够记录该代码块是否被调用过,
dispatch_once函数不仅意味着代码仅会被执行一次,而且还意味着此运行还是线程同步的,也就是说,当我们使用了dispatch_once函数时,就不需要使用诸如@synthesized之类的语句
在cocoa touch框架中 , 有UIApplication、NSUserDefault和NSNotionCtion等单例。另外,NSfilManager和NSBundle类虽然属于Cocoa框架内容,但是也可以在Cocoa Touch框架中使用(Cocoa框架中的单例类有NSFileManager NSWorkspace和NSApplication等)
1.UIApplication类的实例提供了应用程序的集中控制点来保持应用的状态。UIApplication实例总是分配给应用程序的委托对象(UIPpplication),通过应用程序委托对象来响应低内存、应用启动、后台运行和应用终止事件。在HellO Word 案例中 APPDekegate就是这个应用程序的委托对象,它实现了UIAPPlicationDelegate协议。
UIAPPlicalition类有很多方法和属性,下面我们重点介绍其中几个。
1)shareApplication方法。创建和获得UIAPPlication实例的静态方法
2)idleTimerDisable属性。设定和获得“控件时间禁止”状态,系统不会锁定屏幕。开启这项设置需要谨慎,它会使你的应用程序比较耗电
3)-openURL方法:可以打开一些内置的IOS应用,其中包括打开浏览器、打开Goole地图、拨打电话、发送短信和发送email等
打开浏览器的代码如下:
(1)打开百度浏览器
NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
[[UIApplication sharedApplication]openURL:url];
(2)打开google地图浏览器
NSString *searchQuery = @"清华大学";
searchQuery = [searchQuery stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/map?q=%@",searchQuery];
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:urlString]];
其中: NSString中的 stringByAddingPercentEscapesUsingEncoding:方法将字符串转换为URL编码,例如“%E%B8%85%E5%8D%E5%A4%A7%E5%AD%A6”是清华大学的URL编码。(3)拨打电话时,苹果官方要求使用该方法调用内置拨号程序,实例代码如下:
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"10086"]];
(4)发送短信时,苹果官方要求使用该方法调用内置发送短信程序,实例代码如下:
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:10086"]];
(5)发送邮件时,这种方式可以发送简单的不带附件的email,实例代码如下:
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"mailto://eorient@sina.com"]];
2.NSUserDefaults:单例类NSUserDefaults可以很方便地读取应用设置项目。+ standardUserDefaults方法是创建和获得
NSUserDefaults实例的静态方法
3.NSFileManager:
提供了访问文件系统的通用操作,可以定位、创建、复制文件和文件夹在ios 5和mac osx v10.7之后,还可以用管理存储在icloud上的数据。+defaultManager方法是创建和获得NSFileManager实例的方法。
4.NSNotficationcenter:
单例类 NSNotficationcenter提供了信息攻博通知,采用观察者模式的通知机制。+NSDefaultCenter方法是创建按和获得NSNotficationcenter实例的共享方法
5.NSBundle:
提供了动态加载(或卸载)可执行代码、定位子源文件、资源本地化和访问文件系统功能+mainBunble方法是创建和获得NSBundle实例的共享方法