// // HMMusicTool.h // 03-单例模式-Singleton(掌握) // // Created by apple on 14-9-16. // Copyright (c) 2014年 heima. All rights reserved. // 播放音乐 #import <Foundation/Foundation.h> @interface HMMusicTool : NSObject + (instancetype)sharedMusicTool; @end
// // HMMusicTool.m // 03-单例模式-Singleton(掌握) // // Created by apple on 14-9-16. // Copyright (c) 2014年 heima. All rights reserved. // 懒汉式 #import "HMMusicTool.h" @implementation HMMusicTool 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; } @end
// // HMDataTool.h // 03-单例模式-Singleton(掌握) // // Created by apple on 14-9-16. // Copyright (c) 2014年 heima. All rights reserved. // #import <Foundation/Foundation.h> @interface HMDataTool : NSObject + (instancetype)sharedDataTool; @end // // HMDataTool.m // 03-单例模式-Singleton(掌握) // // Created by apple on 14-9-16. // Copyright (c) 2014年 heima. All rights reserved. // #import "HMDataTool.h" @implementation HMDataTool // 用来保存唯一的单例对象 static id _instace; + (id)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace = [super allocWithZone:zone]; }); return _instace; } + (instancetype)sharedDataTool { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instace = [[self alloc] init]; }); return _instace; } - (id)copyWithZone:(NSZone *)zone { return _instace; } @end