OC4_单例

//

//  MusicManager.h

//  OC4_单例

//

//  Created by zhangxueming on 15/6/19.

//  Copyright (c) 2015年 zhangxueming. All rights reserved.

//



#import <Foundation/Foundation.h>



@interface MusicManager : NSObject



//单例方法

//通常以 default 或者 shared 开头



+ (MusicManager *)defaultMusicManager;





@end







//

//  MusicManager.m

//  OC4_单例

//

//  Created by zhangxueming on 15/6/19.

//  Copyright (c) 2015年 zhangxueming. All rights reserved.

//



#import "MusicManager.h"



static MusicManager *music=nil;



@implementation MusicManager



//方法一:



//+ (MusicManager *)defaultMusicManager

//{

//    if (music==nil) {

//        music = [[MusicManager alloc] init];

//    }

//    return music;

//}



//方法二:

//+ (MusicManager *)defaultMusicManager

//{

//    //加线程锁

//    @synchronized(self)

//    {

//        if (music == nil) {

//            music = [[MusicManager alloc] init];

//        }

//    }

//    return music;

//}



//GCD写法

+ (MusicManager *)defaultMusicManager

{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        if (music == nil) {

            music = [[MusicManager alloc] init];

        }

    });

    //NSLog(@"onceToken = %li", onceToken);

    return music;

}

@end







//

//  main.m

//  OC4_单例

//

//  Created by zhangxueming on 15/6/19.

//  Copyright (c) 2015年 zhangxueming. All rights reserved.

//



#import <Foundation/Foundation.h>

#import "MusicManager.h"



//单例类:该类创建的对象有且只有一个



int main(int argc, const char * argv[]) {

    @autoreleasepool {

        MusicManager *m1 = [MusicManager defaultMusicManager];

        MusicManager *m2 = [MusicManager defaultMusicManager];

        MusicManager *m3 = [MusicManager defaultMusicManager];

        

        NSLog(@"m1 = %p m2 = %p m3 = %p", m1,m2, m3);

        

        

    }

    return 0;

}

 

你可能感兴趣的:(单例)