iOS中写一个完整的单例
2015-12-18 15:34
357 查看
一、单例(ARC)
1,当调用alloc方法,系统会调用
这个方法
2,先判断shareManger
这个类是否为空,如果为空就调用父类的方法分配空间,否则直接返回
3,copy
ThemeManger *tm = [ThemeManger shareManger];
[tm copy];//复制一个同样的对象,单例里面不允许这样
mutableCopy复制副本是可变的
(MRC)单例,需要重写以下四个方法
防止创建一个对象之后,MRC环境下会手动管理内存,调用relese活autorelese方法,单例情况下不让对象销毁,我们重写relese方法与autorelese方法(什么事情都不做)
完整code:
static
ViewController
*Vc = nil;
+ (ViewController
*) defaultShare{
static
dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Vc
= [[ViewController
alloc]
init];
});
return
Vc;
}
+ (id) allocWithZone:(struct
_NSZone
*)zone{
if
(zone==nil) {
Vc
= [super
allocWithZone:zone];
return
Vc;
}
return
nil;
}
+ (id) copyWithZone:(struct
_NSZone
*)zone{
if
(zone == nil) {
Vc
= [super
copyWithZone:zone];
return
Vc;
}
return
nil;
}
+ (id) mutableCopyWithZone:(struct
_NSZone
*)zone{
if
(zone == nil) {
Vc
= [super
mutableCopyWithZone:zone];
return
Vc;
}
return
nil;
}
1,当调用alloc方法,系统会调用
这个方法
2,先判断shareManger
这个类是否为空,如果为空就调用父类的方法分配空间,否则直接返回
3,copy
ThemeManger *tm = [ThemeManger shareManger];
[tm copy];//复制一个同样的对象,单例里面不允许这样
mutableCopy复制副本是可变的
(MRC)单例,需要重写以下四个方法
防止创建一个对象之后,MRC环境下会手动管理内存,调用relese活autorelese方法,单例情况下不让对象销毁,我们重写relese方法与autorelese方法(什么事情都不做)
完整code:
static
ViewController
*Vc = nil;
+ (ViewController
*) defaultShare{
static
dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Vc
= [[ViewController
alloc]
init];
});
return
Vc;
}
+ (id) allocWithZone:(struct
_NSZone
*)zone{
if
(zone==nil) {
Vc
= [super
allocWithZone:zone];
return
Vc;
}
return
nil;
}
+ (id) copyWithZone:(struct
_NSZone
*)zone{
if
(zone == nil) {
Vc
= [super
copyWithZone:zone];
return
Vc;
}
return
nil;
}
+ (id) mutableCopyWithZone:(struct
_NSZone
*)zone{
if
(zone == nil) {
Vc
= [super
mutableCopyWithZone:zone];
return
Vc;
}
return
nil;
}
相关文章推荐
- iOS懒加载模式
- Ios的nil,Null,NSNull的使用
- ios触摸事件二 :事件传递
- iOS中assign、copy 、retain等关键字的含义
- iOS中常用的数据类型转换
- IOS pod使用笔记
- IOS pod使用笔记
- IOS pod使用笔记
- 选择手机图片上传&PHIMageManager
- iOS使用AVFoundation实现二维码扫描
- iOS 导出证书.p12文件
- iOSpush到某个页面然后跳转导航栏指定页面
- iOS 开发、测试、生产的描述文件(配置文件)
- IOS学习笔记之触摸与手势
- iOS-布局-Masonry-优先级
- IOS 热更新,实时代码更新,动态更新,动态库framework
- 浅谈iOS开发.a静态库的打包(包括打包的文件中用到了一些别人的三方库和分类的处理)
- IOS多线程开发之线程的状态
- iOS8以后推送通知需要访问权限
- IOS开发之Core Location