20150619_OC之单例

本文详细介绍了Objective-C中单例模式的三种实现方式:直接实例化、加线程锁和使用GCD,通过实例验证了单例模式的正确性和效率。
//
//  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;
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值