A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 笑声不断 中级黑马   /  2016-1-14 22:27  /  627 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

singleton模式非常常见,当某些类,只有一个对象时,就是单例模式,例如工具类和数据类,只能访问一个工具,或者某一个数据,
实现单例模式:
1、单例只有一个对象,所以要实现一个对象,初始化,然后设置为nil。
2、设置实现一个对象的方法,分配空间的方法,通常命名为sharedinstance或者sharedManager。在方法中判断对象是否为nil如果是就要创建内存空间,创建一个对象。
3、同时要重写allcWithZone:以免别人通过该方法进行对象的创建,产生新的对象。
4、实现copyWithZone release,retain ,retainCount和autorelease

static MySingleton *sharedInstance = nil;

+ (MySingleton *)sharedInstance {
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [[MySingleton alloc] init];
}
}
return sharedInstance;
}
+ (id)allocWithZone:(NSZone *)zone {
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [super allocWithZone:zone];
return sharedInstance; // assignment and return on first allocation
}

+ (id)allocWithZone:(NSZone *)zone {
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [super allocWithZone:zone];
return sharedInstance; // assignment and return on first allocation
}
}
return nil; // on subsequent allocation attempts return nil
}

- (id)copyWithZone:(NSZone *)zone {
return self;
}

- (id)retain {
return self;
}

- (unsigned)retainCount {
return UINT_MAX; // denotes an object that cannot be released
}

- (void)release {
//do nothing
}

- (id)autorelease {
return self;
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马