苹果官方单例模式(考虑了多线程)

转自 http://blog.csdn.net/zhaozy55555/article/details/8350082

官方建议

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

你可能感兴趣的:(设计模式,单例模式,object)