标签:
作用:可以保证在程序运行过程,一个类只有一个实例,而且该实例易于外界访问
#import "MusicTool.h" @interface HMMusicTool () @property (strong, nonatomic) NSMutableArray *music; //.h @end @implementation MusicTool -(NSArray *)music { if (_music == nil) { _music = [NSMutableArray array]; } return _music; } id _musicTool; + (id)allocWithZone:(struct _NSZone *)zone { @synchronized(self) { //加锁,避免多次加载 if (_musicTool == nil) { // 防止创建多次 _musicTool = [super allocWithZone:zone]; } } return _musicTool; } +(instancetype)shareMusiclTool { @synchronized(self){ if (_musicTool == nil) { _musicTool = [[self alloc] init]; } } return _musicTool; } - (id)copyWithZone:(NSZone *)zone { return _musicTool; } #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; MusicTool *tool = [[MusicTool alloc] init]; MusicTool *tool1 = [[MusicTool alloc] init]; MusicTool *tool2 = [MusicTool shareMusiclTool]; MusicTool *tool3 = [tool1 copy]; NSLog(@"%p %p %p %p",tool.music,tool1.music,tool2.music,tool3.music); //返回的结果都是相同的指针,所有只有一个实例 }
标签:
原文地址:http://my.oschina.net/u/2346786/blog/479499