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];
最新文章
- 实际遭遇并解决:类型“ASP.global_asax”同时存在的问题
- 在Asp.Net MVC中使用ModelBinding构造Array、List、Collection以及Dictionary
- NYOJ 93 汉诺塔(三)
- 解决“运行arm-linux-gcc命令,提示No such file or directory”的问题
- 初学Android: 四大组件之Activity
- Sql传参含有单引号
- LeetCode Minimum Size Subarray Sum (最短子序列和)
- 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求(转)
- 几个强大的oracle自带函数,可根据日期算年纪,根据数值匹配字段
- MySQL脚本
- 阿赫亚web安全JSON
- HDU 4283 You are the one(间隔DP)
- Windows 10 Creaters Update 画中画模式和窗口高斯模糊
- Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)
- Python s12 Day3 笔记及作业
- Mybatis之旅第五篇-动态SQL
- 破解360doc个人图书馆网站的右键、复制方法
- 《Spring Boot 入门及前后端分离项目实践》系列介绍
- 前端工程化之webpack中配置babel-loader(四)
- win7 64位操作系统中 Oracle 11g 安装教程(图解)