IOS GDC实现单例写法ARC与MRC

static id _instance;

/**

 *  alloc方法内部会调用这个方法

 */

+ (id)allocWithZone:(struct _NSZone *)zone

{

    if (_instance == nil) { // 防止频繁加锁

        @synchronized(self) {

            if (_instance == nil) { // 防止创建多次

                _instance = [super allocWithZone:zone];

            }

        }

    }

    return _instance;

}


+ (instancetype)sharedMusicTool

{

    if (_instance == nil) { // 防止频繁加锁

        @synchronized(self) {

            if (_instance == nil) { // 防止创建多次

                _instance = [[self alloc] init];

            }

        }

    }

    return _instance;

}


- (id)copyWithZone:(NSZone *)zone

{

    return _instance;

}

// 如果是非ARC环境需要加上以下代码

// 重写release对象不会被释放掉

- (oneway void)release { }

// retain直接返回对象

- (id)retain { return self; }

// 读取对象ratainCount返回1

- (NSUInteger)retainCount { return 1;}

// 执行自动释放操作返回self

- (id)autorelease { return self;}


版权声明:本文为博主原创文章,未经博主允许不得转载。

posted on 2015-09-17 21:08  MrYude  阅读(121)  评论(0编辑  收藏  举报

导航