ios-GCD中的其他操作和创建单例对象的对比
来源:互联网 发布:塞班看图软件 编辑:程序博客网 时间:2024/06/05 10:37
在主线程中延迟执行,如果我们想要在子线程中执行,可以将dispatch_get_main_queue改成 dispatch_get_global_queue(0, 0);
//延迟执行 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ });
一次性执行在当前线程上执行,一次性执行的原理是判断静态的全局变量的值,默认是0,如果执行完成之后,设置为-1。once内部会判断变量的值,如果是0就会去执行
dispatch_async(dispatch_get_global_queue(0, 0), ^{ static dispatch_once_t onceToken; dispatch_once(&onceToken,^{ NSLog(@"%@",[NSThread currentThread]); }); });
我们用once的方法去设置创建单例对象的方法和用同步锁去设置创建单例对象的方法是用once的方法比较快。
+(instancetype)sharedNetwork{ //定义instance只执行一次 static id instance=nil; //防止频繁加锁 if(instance == nil) { //线程同步,保证线程的安全 @synchronized (self) { if(instance==nil){instance =[[self alloc]init];} } } return instance;}还有种方法就是为了防止外部在使用的时候调用了alloc,init的时候又创建了对象,所以我们需要去重写alloc方法,而alloc方法的底层实现是+(instancetype)allocWithZone:(struct _NSZone *)zone,这个方法,所以我们重写下这个方法就可以了,再写个sharedTool方法进行封装。
static id instance;+(instancetype)allocWithZone:(struct _NSZone *)zone{ if(instance ==nil)//防止频繁加锁 { @synchronized (self) { if(instance==nil)//防止多线程进入到了这里,如果这里不判断为nil,还是会创建多个 { instance=[super allocWithZone:zone]; } } } return tool;}+(instancetype)sharedNetworkTool{ return [[self alloc]init];}为了防止我们调用sharedTool方法init多次,所以我们就可以把shared方法改成上面我们写的那两个单例创建对象的方式,防止copy出来新对象,我们也可以重写下copyWithZone这个方法。我们创建的对象是NSObject的对象
- (id)copyWithZone:(NSZone *)zone{ return _instance;}
阅读全文
0 0
- ios-GCD中的其他操作和创建单例对象的对比
- iOS中使用GCD的dispatch_once创建单例
- ios GCD 创建单例模式
- 单例模式在iOS中的应用——三种创建单例方法对比
- IOS ARC和GCD结合的单例模式
- iOS 单例对象创建
- GCD创建单例
- 使用GCD的dispatch_once创建单例
- 使用GCD的dispatch_once创建单例
- GCD创建单例的方法
- iOS GCD单例
- iOS中的单例创建
- GCD方式创建单例
- GCD方式创建单例
- 利用GCD 创建单例
- 使用GCD创建单例
- iOS 如何创建单例对象
- iOS 如何创建单例对象
- 技术文章 | 系统稳定性保障核武器——全链路压测
- 有向图的强连通分量分解
- 觉
- 每个 Web 开发者都应该知道的关于 URL 编码的知识
- MOB短信验证快速集成3.0.0及以上
- ios-GCD中的其他操作和创建单例对象的对比
- hihoCoder 1015 KMP算法
- shiro 配置
- vue里发请求用axios
- Alamofire源码解读系列(四)之参数编码(ParameterEncoding)
- 记录下Ubuntu14.04+opencv2.4.13+Qt4/Qt5+Opengl环境搭建遇到的问题
- 爬取北京这个页面的网页信息
- 方法的重载和重写的区别(续)
- 上传图片及添加水印一般处理程序的