gcd实现单例模式其一
2016-06-03 21:37
197 查看
现创建XMGPerson文件
#import "XMGPerson.h"
//严禁起见,用到copy
@interface
XMGPerson ()<NSCopying> //签协议,调-
(id)copyWithZone:(NSZone *)zone;方法
@end
@implementation XMGPerson
static XMGPerson *_person;
//目的:调多少次,都是一个person
+(instancetype)allocWithZone:(struct
_NSZone *)zone{
//分配内存
//重写allect init的目的是同一个person
static
dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_person = [super
allocWithZone:zone];
});
return
_person;
}
+ (instancetype)share{
static
dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 目的:调多少次,只alloc init一次
_person = [[self
alloc]init];//支调一次
});
return
_person;
}
//+是类方法。-是对象方法
- (id)copyWithZone:(NSZone *)zone{
return
_person;
}
@end
#import <Foundation/Foundation.h>
@interface XMGPerson : NSObject
+ (instancetype)share;
@end
在ViewController里
@implementation ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
// NSLog(@"%@,%@",[XMGPerson share],[[XMGPerson alloc]init]);
//打印的结果是一样的,原因看目的一,二
XMGPerson *p = [XMGPerson
share];
XMGPerson *p2 = [p
copy];//完整的单列,在XMGPerson里添加了@interface
XMGPerson ()<NSCopying>@end和- (id)copyWithZone:(NSZone *)zone{return _person;
}
#import "XMGPerson.h"
//严禁起见,用到copy
@interface
XMGPerson ()<NSCopying> //签协议,调-
(id)copyWithZone:(NSZone *)zone;方法
@end
@implementation XMGPerson
static XMGPerson *_person;
//目的:调多少次,都是一个person
+(instancetype)allocWithZone:(struct
_NSZone *)zone{
//分配内存
//重写allect init的目的是同一个person
static
dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_person = [super
allocWithZone:zone];
});
return
_person;
}
+ (instancetype)share{
static
dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 目的:调多少次,只alloc init一次
_person = [[self
alloc]init];//支调一次
});
return
_person;
}
//+是类方法。-是对象方法
- (id)copyWithZone:(NSZone *)zone{
return
_person;
}
@end
#import <Foundation/Foundation.h>
@interface XMGPerson : NSObject
+ (instancetype)share;
@end
在ViewController里
@implementation ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
// NSLog(@"%@,%@",[XMGPerson share],[[XMGPerson alloc]init]);
//打印的结果是一样的,原因看目的一,二
XMGPerson *p = [XMGPerson
share];
XMGPerson *p2 = [p
copy];//完整的单列,在XMGPerson里添加了@interface
XMGPerson ()<NSCopying>@end和- (id)copyWithZone:(NSZone *)zone{return _person;
}
相关文章推荐
- 设计模式之创建型模式 - 特别的变量问题
- C#单例模式(Singleton Pattern)实例教程
- php设计模式之单例、多例设计模式的应用分析
- javascript 单例/单体模式(Singleton)
- C++单例模式应用实例
- 浅谈Java编程中的单例设计模式
- Python单例模式实例分析
- Java单例模式实例简述
- 详解iOS多线程GCD的使用
- 详解IOS中GCD的使用
- 详解iOS中多线程app开发的GCD队列的使用
- 新手谈设计模式 - 单例模式
- JAVA语言泛型编程实现单例模式
- Swift之单例模式
- iOS设计模式之单例模式
- python logging 单例模式范例
- 单例模式
- 单例模式扩展
- gcd
- OC多线程