Chinaunix首页 | 论坛 | 博客
  • 博客访问: 186134
  • 博文数量: 60
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 385
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-19 21:43
个人简介

readonly

文章分类

全部博文(60)

文章存档

2013年(60)

我的朋友

分类: iOS平台

2013-02-19 23:04:25

由于自己设计单态模式存在一定风险,主要是考虑到可能在多线程情况下会出现的问题,因此苹果官方建议使用以下方式来实现单态模式:

				

//单例函数

static MyFoo *sharedSingletonManager = nil;


+ (MyFoo *)sharedManager

{

    @synchronized(self) {   //保证此时没有其他线程对self对象进行修改

        if (sharedSingletonManager == nil) {

            sharedSingletonManager = [[self alloc] init]; // assignment not done here

        }

    }

    return sharedSingletonManager;

}


+ (id)allocWithZone:(NSZone *)zone

{

    @synchronized(self) {

        if (sharedSingletonManager == nil) {

            sharedSingletonManager = [super allocWithZone:zone];

            return sharedSingletonManager;  // assignment and return on first allocation

        }

    }

    return nil; //on subsequent allocation attempts return nil

}


- (id)copyWithZone:(NSZone *)zone

{

    return sharedSingletonManager;

}


- (id)retain

{

    return sharedSingletonManager;

}


- (unsigned)retainCount

{

    return UINT_MAX;  //denotes an object that cannot be released

}


- (oneway void)release

{

    //do nothing

}


- (id)autorelease

{

    return sharedSingletonManager;

}


阅读(770) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~