20150619_OC之單例

//
//  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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章