大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > IOS技巧 > ios 开发之单例模式

ios 开发之单例模式(2)

关键词:ios单例模式  阅读(1216) 赞(14)

[摘要]本文是对ios 开发之单例模式的讲解,对学习IOS苹果软件开发有所帮助,与大家分享。

(4) 适当实现allocWitheZone,copyWithZone,release和autorelease。

//第一步:静态实例,并初始化。
static SurveyRunTimeData *sharedObj = nil;
@implementation SurveyRunTimeData

//第二步:实例构造检查静态实例是否为nil
{
+ (SurveyRunTimeData*) sharedInstance
@synchronized (self)
{
if (sharedObj == nil)
{
[[self alloc] init];
}
}
return sharedObj;
}

//第三步:重写allocWithZone方法
+ (id) allocWithZone:(NSZone *)zone
{
@synchronized (self) {
if (sharedObj == nil) {
sharedObj = [super allocWithZone:zone];
return sharedObj;
}
}
return nil;
}
//第四步
- (id) copyWithZone:(NSZone *)zone
{
return self;
}

//一下方法再Xcode5以上,已经不需要!大家根据事情情况自行判断!
- (id) retain
{
return self;
}

- (unsigned) retainCount
{
return UINT_MAX;
}

- (oneway void) release
{

}

- (id) autorelease
{
return self;
}

- (id)init
{
@synchronized(self) {
[super init];//往往放一些要初始化的变量.
return self;
}
}

@end

+(id)allocWithZone:(NSZone *)zone{
@synchronized(self){
if (shareRootViewController == nil) {
shareRootViewController = [super allocWithZone:zone];
return shareRootViewController;
}
}
return nil;
}

NSZone: 简单来说可以把它想象成一个内存池,alloc或者dealloc这些操作都是在这个内存池中操作的,cocoa总是会分配一个默认的nsZone,任何 默认内存操作都是在这个zone上进行的,使用默认zone存在缺陷,因为他是全局范围的,频繁使用会导致内存的碎片化,尤其是大量的alloc和 dealloc的时候,性能上会受到一定影响。因为你完全可以自己生成一个zone并将alloc,copy这些限制在这个zone中。

«上一页12下一页»


相关评论