单例模式是一种比较常用的设计模式,可以保证在程序的运行过程中,一个类只有一个实例,并且该实例能够方便访问;
本文使用两种方式来实现IOS单例;
两种方法的.h文件相同:
#import <Foundation/Foundation.h> @interface ZNCat : NSObject +(instancetype) sharedCar; @end常规的方法的.m文件:
#import "ZNCat.h" @implementation ZNCat static ZNCat* cat; +(instancetype)allocWithZone:(struct _NSZone *)zone { // 如果创建该对象比较耗时,多线程同时创建多个对象,则不会是大力,需要加互斥锁; @synchronized(self){ if (!cat) { // TODO // [NSThread sleepForTimeInterval:2.0]; cat = [super allocWithZone:zone]; } } return cat; } +(instancetype) sharedCar { @synchronized(self){ if (!cat) { cat = [[self alloc] init]; } } return cat; } -(id)copy { return cat; } @endGCD方法的.m文件:
#import "ZNCat.h" @implementation ZNCat static ZNCat* cat; +(instancetype)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ cat = [super allocWithZone:zone]; }); return cat; } +(instancetype) sharedCar { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ cat = [[self alloc] init]; }); return cat; } -(id)copy { return cat; } @end