多线程:一次性执行
来源:互联网 发布:知乎炸鱼为业 编辑:程序博客网 时间:2024/04/28 19:03
//// ViewController.m// 13-一次性执行//// Created by gzxzmac on 16/1/29.// Copyright © 2016年 gzxzmac. All rights reserved.//#import "ViewController.h"#import "CZTool.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // 设置导航栏样式 });}- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { /* CZTool *tool0 = [CZTool shareTool]; CZTool *tool1 = [CZTool shareTool]; CZTool *tool2 = [CZTool shareTool]; CZTool *tool3 = [CZTool shareTool]; NSLog(@"%@ , %@ , %@ , %@",tool0, tool1, tool2, tool3); CZTool *tool4 = [CZTool syncTool]; CZTool *tool5 = [CZTool syncTool]; CZTool *tool6 = [CZTool syncTool]; NSLog(@"%@, %@ , %@",tool4, tool5, tool6); */ CFAbsoluteTime start = CFAbsoluteTimeGetCurrent(); for (int i = 0; i < 1000 * 1000; ++i) { CZTool *tool = [CZTool shareTool]; } NSLog(@"一次性执行的单例 : %f",CFAbsoluteTimeGetCurrent() - start); start = CFAbsoluteTimeGetCurrent(); for (int i = 0; i < 1000 * 1000; ++i) { CZTool *tool = [CZTool syncTool]; } NSLog(@"互斥锁的单例 : %f",CFAbsoluteTimeGetCurrent() - start);}- (void)onceDemo { NSLog(@"start"); static dispatch_once_t onceToken; // 当 onceToken 是 0 的时候才会执行block 里面的代码 // NSLog(@"默认值%ld",onceToken); static NSObject *obj; // static NSString *ID = @"Cell"; dispatch_once(&onceToken, ^{ // 写一次性执行的代码 NSLog(@"真的是一次吗?"); obj = [[NSObject alloc]init]; }); NSLog(@"%@",obj); // NSLog(@"%ld",onceToken); NSLog(@"end"); /* static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // 放一次性执行的代码 }); */}@end
#import <Foundation/Foundation.h>/* 1. 此类在程序中只有一个对象 2. 有提供类方法来获取单例对象 */@interface CZTool : NSObject+ (instancetype)shareTool; // 使用一次性执行来实现单例+ (instancetype)syncTool;// 使用 互斥锁 来实现单例@end#import "CZTool.h"@implementation CZTool// 工作中单例通常使用一次性执行来完成+ (instancetype)shareTool { static dispatch_once_t onceToken; // 通常(写明确的类型也可以) static id instance; // 内部也有锁,性能比互斥锁要高 dispatch_once(&onceToken, ^{ instance = [[self alloc]init]; }); return instance;}// 之前有看到提供重置单例+ (instancetype)syncTool { static id instance; // 在同一时间内,只会执行一次 @synchronized(self) { // 同一时间,只有一个调用会来到这里 if (instance == nil) { instance = [[self alloc]init]; } } return instance;}@end
#import <Foundation/Foundation.h>@interface CZTest : NSObject@end#import "CZTest.h"@implementation CZTeststatic dispatch_once_t onceToken;// 通常(写明确的类型也可以)static id instance;+ (instancetype)shareTool { // 内部也有锁,性能比互斥锁要高 dispatch_once(&onceToken, ^{ instance = [[self alloc]init]; }); return instance;}// 之前有看到提供重置单例(CoreData)+ (void)reset { onceToken = 0; instance = nil;}@end
0 0
- 多线程:一次性执行
- 229,一次性执行代码
- 自动执行一次性计划任务--at
- 一次性执行多条SQL语句
- IOS多线程操作之一次性代码
- GCD线程组、一次性执行和稍后执行
- GCD的调度组和延迟执行、一次性执行
- 多线程执行
- 存储过程:一次性执行成批的SQL语句
- GCD高级功能(一次性执行,调度组,延迟操作)
- Mysql 一次性执行多条语句的实现
- 谷歌、flick网站图片 一次性下载 javaWeb项目 多线程下载,
- 刀哥多线程之一次性代码gcd-11-once
- Linux多线程基础学习(七)pthread一次性初始化
- GCD之——延迟执行、调度组、以及一次性执行代码
- 多线程 执行 多任务
- 多线程执行的方法
- Java多线程顺序执行
- linux下mysql查询时中文乱码(终极解决办法)亲测!
- QTableWidget的用法总结
- 多线程:barrier的使用
- Xcode插件管理工具Alcatraz
- Could not find or load main class HelloWorld
- 多线程:一次性执行
- 关于《编码:隐匿在计算机软硬件背后的语言》
- 多线程:延时执行
- 很腻害的视频,回味百遍
- 《写在伤心的时候》
- 周鸿祎:很多程序员聪明,但我一看就知道他不会成功
- HDU:2277 Change the ball(水)(数学)
- css样式
- 标准类的写法