zoukankan      html  css  js  c++  java
  • objectivec 单例模式

    如果你准备写一个类,希望保证只有一个实例存在,同时可以得到这个特定实例提供服务的入口,那么可以使用单态设计模式。
    单态模式在Java、C++中很常用,在Cocoa里,也可以实现。
    但是,
    Objective-C的单例模式绝对和你所想象不一样,他的写法和你所见过的所有语言的写法都不一样。
    官方建议
    由于自己设计单态模式存在一定风险,主要是考虑到可能在多线程情况下会出现的问题,因此苹果官方建议使用以下方式来实现单态模式:

    static MyGizmoClass *sharedGizmoManager = nil;
    + (MyGizmoClass*)sharedManager
    {
        @synchronized(self) {
            if (sharedGizmoManager == nil) {
                sharedGizmoManager = [[super allocWithZone:nil] init]
            }
        }
        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;
    }
  • 相关阅读:
    oracle在没
    一天中时针和分钟重合的次数
    oracle的隐藏的东东
    左右小移动
    JS全选的操作
    JS定时器
    在文件中查找字符串
    表单原件
    div和span互换
    div和span的区别
  • 原文地址:https://www.cnblogs.com/yishuiliunian/p/2432543.html
Copyright © 2011-2022 走看看