OC单例模式的实现

SingleClass.m

#import <Foundation/Foundation.h>

@class SingleClass;



static SingleClass *instance = nil;



@interface SingleClass : NSObject <NSCopying>

+ (instancetype)shareInstance;

@end



@implementation SingleClass

//类方法,获取单例对象

+ (instancetype)shareInstance{

    if (!instance) {

        instance = [[self alloc] init];

    }

    return instance;

}

//类方法,调用对象的alloc方法时返回已存在的单例

+ (instancetype)allocWithZone:(struct _NSZone *)zone{

    if (!instance) {

        instance = [super allocWithZone:zone];

    }

    return instance;

}

//copy时,返回已存在的单例

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

    return instance;

}

//copy时,返回已存在的单例

- (id)copy{

    return instance;

}

@end

main.m

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        SingleClass *s1 = [SingleClass shareInstance];

        SingleClass *s2 = [SingleClass shareInstance];

        SingleClass *s3 = [[SingleClass alloc] init];

        SingleClass *s4 = [s1 copy];

        

        NSLog(@"%p",s1);

        NSLog(@"%p",s2);

        NSLog(@"%p",s3);

        NSLog(@"%p",s4);

    }

    return 0;

}

结果:

2015-03-22 22:24:21.201 SingleDemo[1349:61326] 0x1001066e0

2015-03-22 22:24:21.202 SingleDemo[1349:61326] 0x1001066e0

2015-03-22 22:24:21.202 SingleDemo[1349:61326] 0x1001066e0

2015-03-22 22:24:21.202 SingleDemo[1349:61326] 0x1001066e0

 

你可能感兴趣的:(单例模式)