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

单例-b

时间:2016-06-16 17:54:29      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

这个比较老了,是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

单例-b

标签:

原文地址:http://www.cnblogs.com/isItOk/p/5591643.html

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