码迷,mamicode.com
首页 > 其他好文 > 详细

单例类的编写

时间:2015-11-06 17:41:26      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

1.自己写

#import "HttpManager.h"

 

static HttpManager *httpManager=nil;

@implementation HttpManager

 

+(instancetype )shareManager

{

    //单例对象为空的时候创建

    if (httpManager==nil)

    {

        httpManager=[[HttpManager alloc] init];

    }

    return httpManager;

}

//一般单例类,为防止外界 调用alloc方法,需要重写alloc方法

+ (id)allocWithZone:(struct _NSZone *)zone

{

@synchronized(self)

    {

        if (!httpManager) {

            httpManager=[super allocWithZone:zone];

            return httpManager;

        }

        return httpManager;

    }

}

//重写初始化方法

-(id)init

{

    return httpManager;

}

 

 

@end

2.苹果官方建议

Apple官方建议

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

static MyGizmoClass *sharedGizmoManager = nil;

  + (MyGizmoClass*)sharedManager

  {

  @synchronized(self) {

  if (sharedGizmoManager == nil) {

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

  }

  }

  return sharedGizmoManager;

  }

  + (id)allocWithZone:(NSZone *)zone

  {

  @synchronized(self) {

  if (sharedGizmoManager == nil) {

  sharedGizmoManager = [super allocWithZone:zone];

  return sharedGizmoManager; // 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;

  }

 

单例类的编写

标签:

原文地址:http://www.cnblogs.com/fuunnyy/p/4942970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!