ios中单例的写法
来源:互联网 发布:暴力破解rar密码软件 编辑:程序博客网 时间:2024/05/18 22:46
最主要就是两步:
1.重写allocwithzone,用dispatch_once实例化一个静态变量
2.写一个+sharedXXX方便其他类调用
要注意使用GCD的方法来保证在dispatch中的代码只执行一次。
DemoObj.m中的代码:
//// DemoObj.m// testdanli//// Created by 娟娟 on 15/11/3.// Copyright (c) 2015年 娟娟. All rights reserved.//<strong style="color: rgb(255, 0, 0);">#import "DemoObj.h"@implementation DemoObj/* 1.重写allocwithzone,用dispatch_once实例化一个静态变量 2.写一个+sharedXXX方便其他类调用 *///在ios中,所有对象的内存空间的分配最终都会调用allocwithzone方法//如果做单例,需要重写此方法//GCD提供了一个方法,专门用来创建单例的+(id)allocWithZone:(struct _NSZone *)zone{ static DemoObj * instance ; //dispatch_once是线程安全的,onceToken默认为0 static dispatch_once_t onceToken; //这个宏可以保证快代码中的指令只被执行一次 dispatch_once(&onceToken,^{ //永远只会被执行一次,instance只会被实例化一次 instance = [super allocWithZone:zone]; }); return instance;}//共享实例,便于其他类访问+(instancetype)sharedDemoObj{ return [[self alloc]init];}@end</strong>
ViewController中的方法:
//// ViewController.m// testdanli//// Created by 娟娟 on 15/11/3.// Copyright (c) 2015年 娟娟. All rights reserved.//#import "ViewController.h"#import "DemoObj.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. DemoObj *obj = [[DemoObj alloc]init]; NSLog(@"%@",obj); for (int i = 0; i<10; i++) { DemoObj *obj1 = [DemoObj sharedDemoObj]; NSLog(@"%@",obj1); }}@end
可以在打印中看到,每次地址都是一样的,实际上返回的是同一个对象。
单例是一种常用的软件设计模式:
通过单例模式可以保证系统中一个类只有一个实例。
优点:
可以阻止其他对象实例化单例对象的副本,从而确保所有对象都访问唯一实例。
缺点:
单例对象一旦建立,对象指针是保存在静态区的,单例对象在堆中分配的内存空间,会在应用程序终止后才会被释放。
提示:
只有确实需要唯一使用的对象才需要考虑单例模式,不要滥用单例。
0 0
- ios中单例的写法
- ios中单例的写法
- iOS中单例的通用写法
- ios中单例的两种写法~~~
- ios中单例的写法和目的
- ios枚举的写法
- iOS 单利的写法
- iOS 中单例写法
- ios 单例的写法
- iOS下的路径写法
- iOS自定义cell的写法
- iOS 懒加载的写法
- iOS 单例复用性最强的写法
- iOS 单例的写法
- ios 单例的写法
- ios注释的正确写法
- ios-闭包的写法
- ios 单例模式的写法
- C++primer学习:类模板(2)类模板:模板参数,成员模板和控制实例化
- H5formData无刷新上传文件
- java中堆和栈的区别
- Can't create a new thread (errno 11) 解决办法 mysql无法连接
- 汇编代码注解
- ios中单例的写法
- ubuntu 永久写入dns
- mysqlworkbench 'delayed-insert=FALSE'
- Objective-C 身份证号码校验
- Scan Listener In INTERMEDIATE Mode - Not All Endpoints Registered
- CDN基本常识
- cordova与ios native code交互的原理
- 高性能高效率Orm框架-JfireOrm介绍
- PHP Session并发操作阻塞问题