//
// MusicManager.h
// IOS_ObjectiveC_單例
//
// Created by qianfeng on 15/6/19.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface MusicManager : NSObject
//單例方法
//通常以default或者shared開頭
+ (MusicManager *)defaultMusicManager;
@end
//
// MusicManager.m
// IOS_ObjectiveC_單例
//
// Created by qianfeng on 15/6/19.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import "MusicManager.h"
static MusicManager *music = nil;
@implementation MusicManager
//方法一:對於多線程不安全
//+ (MusicManager *)defaultMusicManager
//{
// if (nil==music) {
// music = [[MusicManager alloc] init];
// }
// return music;
//}
//方法二:加線程鎖
//+ (MusicManager *)defaultMusicManager
//{
// //加線程鎖,同步
// @synchronized(self)
// {
// if (nil==music)
// {
// music = [[MusicManager alloc] init];
// }
// }
// return music;
//}
//方法三:GCD寫法
+ (MusicManager *)defaultMusicManager
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
if (music == nil) {
music = [[MusicManager alloc] init];
}
});
return music;
}
@end
// main.m
// IOS_ObjectiveC_單例
//
// Created by qianfeng on 15/6/19.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "MusicManager.h"
//單例類:該類創建的對象有且只有一個
int main(int argc, const char * argv[]) {
@autoreleasepool {
MusicManager *manager = [MusicManager defaultMusicManager];
MusicManager *manager1 = [MusicManager defaultMusicManager];
MusicManager *manager2 = [MusicManager defaultMusicManager];
NSLog(@"manager = %p,manager1 = %p,manager2 = %p",manager,manager1,manager2);
//結果:manager = 0x100102a80,manager1 = 0x100102a80,manager2 = 0x100102a80
}
return 0;
}