ARC下的单例及其应用
来源:互联网 发布:c语言中sleep函数 编辑:程序博客网 时间:2024/06/06 20:54
dispatch_once 创建单例模式:
单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
dispatch_once函数中的代码块只会执行一次,而且是线程安全的。
// ViewController.m// MyGizmoDemo//// Created by yons on 15-3-3.// Copyright (c) 2015年 yons. All rights reserved.//#import "ViewController.h"@interface ViewController ()@end@implementation ViewController/** 步骤: 1.一个静态变量_inastance 2.重写allocWithZone, 在里面用dispatch_once, 并调用super allocWithZone 3.自定义一个sharedXX, 用来获取单例. 在里面也调用dispatch_once, 实例化_instance -----------可选------------ 4.如果要支持copy. 则(先遵守NSCopying协议)重写copyWithZone, 直接返回_instance即可. *//**第1步: 存储唯一实例*/static ViewController *_instance;/**第2步: 分配内存孔家时都会调用这个方法. 保证分配内存alloc时都相同*/+(id)allocWithZone:(struct _NSZone *)zone{ //调用dispatch_once保证在多线程中也只被实例化一次 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [super allocWithZone:zone]; }); return _instance;}/**第3步: 保证init初始化时都相同*/+(instancetype)sharedTool{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[ViewController alloc]init]; }); return _instance;}/**第4步: 保证copy时都相同*/-(id)copyWithZone:(NSZone *)zone{ return _instance;}- (void)viewDidLoad { [super viewDidLoad]; //实例化一个类的几种方法. 单例就是要保证实例化出来的类是同一个类 //1.alloc init方法. 一般不这么来调用单例. ViewController *v1 = [[ViewController alloc]init]; ViewController *v2 = [[ViewController alloc]init]; ViewController *v3 = [ViewController sharedTool]; ViewController *v4 = [v3 copy]; NSLog(@"%@/n",v1); NSLog(@"%@/n",v2); NSLog(@"%@/n",v3); NSLog(@"%@/n",v4); }- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
使用dispatch_once的好处:
1.线程安全
2.很好的满足静态分析需求
3.自动引用计数(ARC)兼容
4.减少了代码量
0 0
- ARC下的单例及其应用
- 【iOS】ARC-MRC下的单例及其应用
- 【iOS】ARC-MRC下的单例及其应用
- 【iOS】ARC-MRC下的单例及其应用
- ARC模式下的单例写法。
- ARC下的单例模式
- ARC和MRC下的单例
- iOS中,ARC的环境下的单例模式。
- iOS(ARC和MRC下的单例)
- objc的单例模式(ARC环境下)
- [iOS]ARC和MRC下的单例
- Objective C ARC下的单例模版宏 ARC Singleton template
- 在ARC与非ARC下 iOS创建单例 遇到的问题
- ARC下使用单例模式
- 单例模式的实现(ARC与非ARC)
- iOS的ARC/MRC单例模式
- IOS单例模式(MRC下和ARC下)
- iOS中的ARC和MRC环境下的单例设计模式的分析
- Dynamics CRM 2015 New Feature (4): Calculate Field & Rollup Field
- Ext JS 4官方指南(四)—— 基本概念之Ext JS 容器与布局
- NGUI学习笔记
- view绘制流程些许心得
- MySQL行级锁、表级锁、页级锁详细介绍
- ARC下的单例及其应用
- Linux下 vsftpd安装配置 ftp服务器
- Open quote is expected for attribute "namespace" associated with an element type "mapper".
- cocos2d-x 代码拾遗
- 17个新手常见Python运行时错误
- vs2005用vc++创建智能设备项目失败的解决办法
- WORD2010每次启动都要配置
- AsyncSocket使用心得
- 新的开始