iOS 的单例模式 dispatch_once
iOS 的单例模式 dispatch_once
有些变量仅仅须要初始化一次(如从文件里读取配置參数。读取设备型号等等),能够使用dispatch_once来进行读取优化。保证仅仅调用API一次,以后就仅仅要直接訪问变量就可以.
WeatherClient.h
#import "AFHTTPClient.h"
@interface WeatherClient : AFHTTPClient
+(WeatherClient *)sharedClient;
@end
WeatherClient.m
#import "WeatherClient.h"
@implementation WeatherClient
+(WeatherClient *)sharedClient
{
static WeatherClient *sharedClient=nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{sharedClient =[[WeatherClient alloc] initWithBaseURL:[NSURL URLWithString:API]];
});
return sharedClient;
}
@end
在软件project中,单例是一种用于实现单例的数学概念,即将类的实例化限制成仅一个对象的设计模式。
单例是一种类。该类仅仅能实例化一个对象。
当Apple引入了Grand
Central Dispatch (GCD)(Mac OS 10.6和iOS4.0),他们也引入了一个非常适合用于实现单例模式的函数。
void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block);
假设被多个线程调用。该函数会同步等等直至代码块完毕。
+ (AccountManager *)sharedManager {
static AccountManager *sharedAccountManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[self alloc] init];
});
return sharedAccountManagerInstance;
}
AccountManager *accountManager = [AccountManager sharedManager];
AccountManager *accountManager = [[AccountManager alloc] init];
iOS 的单例模式 dispatch_once的更多相关文章
- iOS开发单例模式 dispatch_once
什么是单例 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源 ...
- iOS开发--单例模式
单例模式在iOS开发中可能算是最常用的模式之一了,但是由于oc本身的语言特性,想要写一个正确的单例模式相对来说比较麻烦,这里我就抛砖引玉来聊一聊iOS中单例模式的设计思路.关于单例模式更多的介绍请参考 ...
- QF——iOS的单例模式
iOS的单例模式: 单例,即为单个实例,确保一个类里只有一个实例,向整个系统提供一个唯一的实例. 甚至为了严格提供唯一的实例,通常只允许该类自己提供实例化的方法,不允许出现其他入口.这时我们通常得重写 ...
- 【iOS】单例模式
单例模式在软件开发中经常用到,在iOS系统framework也很多地方用到单例模式,例如 [NSUserDefaults standardUserDefaults], [NSBundle mainBu ...
- iOS设计模式-单例模式
(一)什么是单例模式(Singleton) 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 *最初的定义是在<设计模式>(Addison-Wesley)中 解读 1> ...
- Objective-C(iOS)严格单例模式正确实现
注:本文所有权归作者所有,转载请注明出处 当希望在一个应用程序中某个类的对象只能存在一个的时候就可以考虑用单例模式来实现,单例模式在C++中比较容易实现(只需把构造函数声明为private),而在Ob ...
- ios之单例模式
原帖地址:http://www.galloway.me.uk/tutorials/singleton-classes/ 本文为博主自行翻译,转载请注明出处:http://blog.csdn.net/i ...
- iOS开发-单例模式的解读
现在网上的有很多人写单例模式,一个很基本的东西但是版本也有很多,新人看了难免有些眼花缭乱的感觉.自己最新比较闲,也过来写一些自己的心得. 在往下看之前,我们要明白一点,那就是在什么情况下我们才要用到单 ...
- iOS设计模式——单例模式
单例模式用于当一个类只能有一个实例的时候, 通常情况下这个“单例”代表的是某一个物理设备比如打印机,或是某种不可以有多个实例同时存在的虚拟资源或是系统属性比如一个程序的某个引擎或是数据.用单例模式加以 ...
随机推荐
- Windows 2008中部署dll到GAC
两种方法: 1 gacutil.exe 2 直接拖动DLL到GAC (此种方式要关闭UAC,否则提示"Access is Denied")
- C# 访问mongodb数据库
1.引用四个mongodb动态库MongoDB.Bson.dll,MongoDB.Driver.Core.dll,MongoDB.Driver.dll,MongoDB.Driver.Legacy.dl ...
- java list遍历三种方法
JSONArray jsonArray = new JSONArray(); jsonArray.add("1"); jsonArray.add("2"); j ...
- 用Martini、websocket实现单机版聊天室
ChatRoom A stand-alone ChatRoom in Martini Please Star https://github.com/renleimlj/ChatRoom Interfa ...
- 01-Entity FrameWork如何控制数据的变化
在Entity Framework所有操作数据就是更新EF容器中的实体状态 public enum EntityState { Added = , Deleted = , Detached = , M ...
- 2017-12-04HTML布局_div布局
HTML布局_div布局 <!doctpye> <html> <head> <meta charset = 'utf-8'> <title> ...
- Mysql慢SQL与索引案例
写在最前 关于慢sql的开启与配置查看之前我整理的文章: http://www.cnblogs.com/hanxiaobei/p/5515624.html 前提准备: tomcat7.x mysql- ...
- NodeJS —— 自定义流的实现
概述 常见的自定义流有四种,Readable(可读流).Writable(可写流).Duplex(双工流)和 Transform(转换流),常见的自定义流应用有 HTTP 请求.响应,crypto 加 ...
- ProcessBar 与SeekBar进度条
1.进度条关键属性 2.进度条的常用方法 progress = (ProgressBar) findViewById(R.id.horiz); (1)获取第一进度条:progress.getProgr ...
- 常用css属性总结
边框修饰:border------>top,bottom,left,right上下左右边框 分为:color,类型style{ groove,dashed,ridge,solid}一个值---- ...