zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Vue监听器、过滤器
    Vue生命周期、计算属性
    数组去重
    ES6总结
    学习笔记--html篇(1)
    学习整理--flex布局(1)
    对块作用域与变量函数提升再添新认识
    了解使用web workers
    js中的事件循环模型与特殊的定时器
    操作系统、浏览器与js之间的一些概念与联系
  • 原文地址:https://www.cnblogs.com/0515offer/p/4589564.html
Copyright © 2011-2022 走看看