zoukankan      html  css  js  c++  java
  • 单例类的编写

    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;

      }

  • 相关阅读:
    与WinRT组件进行操作
    clr via c# 运行时序列化
    clr via c# 程序集加载和反射(2)
    clr via c# 程序集加载和反射集(一)
    clr via c# clr寄宿和AppDomain (一)
    cir from c# 托管堆和垃圾回收
    浏览器页面的生命周期
    C#常用泛型集合
    Params修饰符
    ASP.net应用程序的生命周期
  • 原文地址:https://www.cnblogs.com/fuunnyy/p/4942970.html
Copyright © 2011-2022 走看看