zoukankan      html  css  js  c++  java
  • 单例-b

    这个比较老了,是mrc 里面的

    此例以模仿Apple官方文档的单例写出来的。但是一直有一个非常不明白的地方,就是alloc与allocWithZone:的重载中,为什么要return [[self currentEnvironment] retain];,而不是return [self currentEnvironment];。

    有的朋友认为alloc, copy在这个单例中没有意义,因为alloc会再次的调用allocWithZone, copy会调用copyWithZone。但是为了保险起见,我仍然保留了alloc,喜欢刨根问底的朋友可以查阅一些相关的资料。

    苹果的官方文档   单例的例子在文档最后。

    @implementation LXYEnvironment

    static LXYEnvironment *_environment=nil;

    #pragma mark- 单例模式

    + (LXYEnvironment *)currentEnvironment

    {

        @synchronized(self)

        {

            if (!_environment)

            {

                _environment=[[super allocWithZone:NULL] init];

            }

        }

        return _environment;

    }

    + (id)alloc

    {

        return [[self currentEnvironment] retain];

    }

    + (id)allocWithZone:(NSZone *)zone

    {

        return [[self currentEnvironment] retain];

    }

    - (id)copy

    {

        return self;

    }

    - (id)copyWithZone:(NSZone *)zone;

    {

        return self; //确保copy对象也是唯一

    }

    - (id)retain

    {

        return self; //确保计数唯一

    }

    - (NSUInteger)retainCount

    {

        return NSUIntegerMax;  //这样打印出来的计数永远为-1

    }

    - (oneway void)release

    {

        //do nothing

    }

    + (void)release

    {

        //do nothing

    }

    - (id)autorelease

    {

        return self;//确保计数唯一

    }

    @end

  • 相关阅读:
    火币交易细则
    期货基础知识(竞价,定价,保证金计算)
    期货开平,多开,空开,多平,空平
    最优风险资产组合
    为什么不要把鸡蛋放在同一个篮子里?
    Linux shell 自定义函数
    Linux shell for while 循环
    shell 脚本编写 if else then
    linux任务前后台执行
    Mac 破解Navicat Premium Mac12
  • 原文地址:https://www.cnblogs.com/isItOk/p/5591643.html
Copyright © 2011-2022 走看看