zoukankan      html  css  js  c++  java
  • iOS-单例模式(懒汉式和饿汉式)和GCD实现

    //
    //  HMMusicTool.h
    //  03-单例模式-Singleton(掌握)
    //
    //  Created by apple on 14-9-16.
    //  Copyright (c) 2014年 heima. All rights reserved.
    //  播放音乐
    
    #import <Foundation/Foundation.h>
    
    @interface HMMusicTool : NSObject
    + (instancetype)sharedMusicTool;
    @end



    //
    //  HMMusicTool.m
    //  03-单例模式-Singleton(掌握)
    //
    //  Created by apple on 14-9-16.
    //  Copyright (c) 2014年 heima. All rights reserved.
    //  懒汉式
    
    #import "HMMusicTool.h"
    
    @implementation HMMusicTool
    static id _instance;
    
    /**
     *  alloc方法内部会调用这个方法
     */
    + (id)allocWithZone:(struct _NSZone *)zone
    {
        if (_instance == nil) { // 防止频繁加锁
            @synchronized(self) {
                if (_instance == nil) { // 防止创建多次
                    _instance = [super allocWithZone:zone];
                }
            }
        }
        return _instance;
    }
    
    + (instancetype)sharedMusicTool
    {
        if (_instance == nil) { // 防止频繁加锁
            @synchronized(self) {
                if (_instance == nil) { // 防止创建多次
                    _instance = [[self alloc] init];
                }
            }
        }
        return _instance;
    }
    
    - (id)copyWithZone:(NSZone *)zone
    {
        return _instance;
    }
    @end
    //
    //  HMDataTool.h
    //  03-单例模式-Singleton(掌握)
    //
    //  Created by apple on 14-9-16.
    //  Copyright (c) 2014年 heima. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface HMDataTool : NSObject
    + (instancetype)sharedDataTool;
    @end
    
    
    //
    //  HMDataTool.m
    //  03-单例模式-Singleton(掌握)
    //
    //  Created by apple on 14-9-16.
    //  Copyright (c) 2014年 heima. All rights reserved.
    //
    
    #import "HMDataTool.h"
    
    @implementation HMDataTool
    // 用来保存唯一的单例对象
    static id _instace;
    
    + (id)allocWithZone:(struct _NSZone *)zone
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _instace = [super allocWithZone:zone];
        });
        return _instace;
    }
    
    + (instancetype)sharedDataTool
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _instace = [[self alloc] init];
        });
        return _instace;
    }
    
    - (id)copyWithZone:(NSZone *)zone
    {
        return _instace;
    }
    
    @end
  • 相关阅读:
    详解Python模块导入方法
    第15天上课例子,sqllchemy运用
    【Demo 0075】获取系统进程列表
    【Demo 0076】获取进程中模块列表
    【Demo 0071】托盘小工具
    【Demo 0070】读取EXE\DLL中ICON
    【Demo 0073】复合文件拼拆
    【Demo 0072】启动外部应用程序
    【Demo 0078】获取系统版本信息
    【Demo 0079】进程继承关系
  • 原文地址:https://www.cnblogs.com/zhuyaguang/p/4853382.html
Copyright © 2011-2022 走看看