IOS学习 GCD 单例模式 一次性执行 涉及记录时间,计算时差
2016-04-05 23:17
423 查看
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event{
CZConfig *config1 = [[CZConfig
alloc]init];
NSLog(@"config1 %@",config1);
CZConfig *config2 = [[CZConfig
alloc]init];
NSLog(@"config2 %@",config2);
CZConfig *config3 = [CZConfig
config];
NSLog(@"config3 %@",config3);
CZConfig *config4 = [CZConfig
config];
NSLog(@"config4 %@",config4);
CZConfig *config5 = [CZConfig
configSync];
NSLog(@"config5 %@",config5);
CZConfig *config6 = [CZConfig
configSync];
NSLog(@"config6 %@",config6);
[self
demo];
}
//多线程测试
-(void)demo{
//dispatch_once
double time1 =
CFAbsoluteTimeGetCurrent();
//记录开始时间
for (int i =
0; i <999*999; i++) {
dispatch_async(dispatch_get_global_queue(0,
0), ^{
CZConfig *config7 = [CZConfig
config];
});
}
double time2 =
CFAbsoluteTimeGetCurrent();
//记录结束时间
NSLog(@"dispatch_once %f",time2-time1);
//同步锁
double time3 =
CFAbsoluteTimeGetCurrent();
//记录开始时间
for (int i =
0; i <999*999; i++) {
dispatch_async(dispatch_get_global_queue(0,
0), ^{
CZConfig *config8 = [CZConfig
configSync];
});
}
double time4 =
CFAbsoluteTimeGetCurrent();
//记录结束时间
NSLog(@"同步锁 %f",time4-time3);
}
@interface CZConfig : NSObject
+(instancetype)config;
+(instancetype)configSync;
@end
@implementation CZConfig
+(instancetype)config{
static
CZConfig *instance;
//一次性执行
static
dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[CZConfig
alloc]init];
});
return instance;
}
+(instancetype)configSync{
static
CZConfig *instance;
//同步锁
@synchronized(self) {
if (instance ==
nil) {
instance = [[CZConfig
alloc]init];}
}
return instance;
}
@end
*)event{
CZConfig *config1 = [[CZConfig
alloc]init];
NSLog(@"config1 %@",config1);
CZConfig *config2 = [[CZConfig
alloc]init];
NSLog(@"config2 %@",config2);
CZConfig *config3 = [CZConfig
config];
NSLog(@"config3 %@",config3);
CZConfig *config4 = [CZConfig
config];
NSLog(@"config4 %@",config4);
CZConfig *config5 = [CZConfig
configSync];
NSLog(@"config5 %@",config5);
CZConfig *config6 = [CZConfig
configSync];
NSLog(@"config6 %@",config6);
[self
demo];
}
//多线程测试
-(void)demo{
//dispatch_once
double time1 =
CFAbsoluteTimeGetCurrent();
//记录开始时间
for (int i =
0; i <999*999; i++) {
dispatch_async(dispatch_get_global_queue(0,
0), ^{
CZConfig *config7 = [CZConfig
config];
});
}
double time2 =
CFAbsoluteTimeGetCurrent();
//记录结束时间
NSLog(@"dispatch_once %f",time2-time1);
//同步锁
double time3 =
CFAbsoluteTimeGetCurrent();
//记录开始时间
for (int i =
0; i <999*999; i++) {
dispatch_async(dispatch_get_global_queue(0,
0), ^{
CZConfig *config8 = [CZConfig
configSync];
});
}
double time4 =
CFAbsoluteTimeGetCurrent();
//记录结束时间
NSLog(@"同步锁 %f",time4-time3);
}
@interface CZConfig : NSObject
+(instancetype)config;
+(instancetype)configSync;
@end
@implementation CZConfig
+(instancetype)config{
static
CZConfig *instance;
//一次性执行
static
dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[CZConfig
alloc]init];
});
return instance;
}
+(instancetype)configSync{
static
CZConfig *instance;
//同步锁
@synchronized(self) {
if (instance ==
nil) {
instance = [[CZConfig
alloc]init];}
}
return instance;
}
@end
相关文章推荐
- (二)Mina源码解析之IoService
- iOS数据持久化 -- Core Data-备用
- iOS中3种正则表达式的使用与比较-备
- iOS 正则表达式
- 关于IOS中使用支付功能(以支付宝为例)
- 关于IOS中使用支付功能(以支付宝为例)
- iOS地图定位功能的实现(解决代理方法不执行问题,解决默认定位苹果总部问题)
- iOS 音频开发经验汇总
- 浅谈iOS沙盒目录
- “空”园三兄弟之nil和Nil及NUL
- iOS关键字
- iOS Client 与WebSocket 通信(二)
- iOS开发 ☞ NSMutableAttributedString详解
- 初学ios转场之Present ModalView
- iOS Client 与WebSocket 通信(一)
- iOS开发之理解iOS中的MVC设计模式
- iOS音频播放
- iOS开发之支付宝支付
- iOS音频功能开发(一)整理
- iOS边练边学--CALayer,非根层隐式动画,钟表练习