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;
    }
  • 相关阅读:
    几种数据结构的查找、删除、插入的时间复杂度(数组 链表 二叉查找树 平衡二叉查找树 哈希表)
    java 多线程的状态迁移 常用线程方法分析
    JVM内存分区
    详解 Java I/O 与装饰者模式
    详解 java 异常
    ExecutorService 线程池详解
    CG group
    VIM 配置python
    Q35+uefi or bios+legacy // PCI | PCIE
    硬盘接口协议
  • 原文地址:https://www.cnblogs.com/0515offer/p/4589564.html
Copyright © 2011-2022 走看看