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
  • 相关阅读:
    第三周java学习总结
    第一周Java学习总结
    关闭窗体
    乱七八糟
    网页游戏资料
    timer控件的使用
    spread 签套循环改变颜色编号为颜色
    限制输入‘号的代码
    SQlcharindex命令
    限制输入类型
  • 原文地址:https://www.cnblogs.com/zhuyaguang/p/4853382.html
Copyright © 2011-2022 走看看