Object-C中单例的特性和实现

一句话介绍单例:整个程序中,无论什么时候无论在哪个类中创建一个对象,创建时取到的对象永远是同一个对象。

单例的特性:

1.由于在不同位置创建的对象返回的都是同一个对象,因此,单例模式可以作为整个程序的一个共享对象,任何时候任何模块都可以操作访问该单例对象的属性。

2.有人说,宏定义也可以全局共享使用。但是单例还有一个重要的特性,就是在程序运行过程中,可以根据实际需求修改单例对象的属性,而宏定义一旦定义后,整个程序运行过程中是无法修改的。

单例的实现思路:

Object-C中创建一个对象的时候会调用alloc方法,系统在调用allco方法时,调用了下面这个方法

+ (id)allocWithZone:(NSZone *)zone

我们可以通过在重写单例对象的这个类方法,在方法内通过判断来返回唯一存在的对象即可。

具体实现代码如下:

+ (id)allocWithZone:(NSZone *)zone {
    static id instance = nil;
    if (instance == nil) {
        instance = [super allocWithZone:zone];
    }
    return instance;
}

以上代码时简单的实现一个单例,但是对于多线程访问还需要加一些保护性的代码,这个就放到后面多线程的地方讲吧。

单例的一些规范:

一般情况下,每个单例应该创建一个一个类方法,方便调取使用。方法的命名规范为:

+ (instancetype)shareClass;

+(instancetype)defaultClass;

在方法实现中,直接return [self new];

好了,这就是单例最简单的实现的方法思路,掌握了这些基本思路,思考一下,单例在多线程使用过程中会出现什么问题呢?

猜你喜欢

转载自blog.csdn.net/JustinZYP/article/details/124204307