zoukankan      html  css  js  c++  java
  • 单例设计模式-01-GCD-单例

     1 //
     2 //  LYMusicTool.m
     3 //  01-单例设计模式
     4 //
     5 //  Created by mac on 16/4/22.
     6 //  Copyright © 2016年 mac. All rights reserved.
     7 
     8 //alloc的本质是调用:-->>allocWithZone:方法
     9 
    10 #import "LYMusicTool.h"
    11 
    12 @interface LYMusicTool ()
    13 
    14 @end
    15 
    16 @implementation LYMusicTool
    17 /**
    18  *  1. 创建一个全局变量
    19  */
    20 id _music;
    21 
    22 - (NSArray *)musics {
    23     
    24     if (!_musics) {
    25         
    26         _musics = [NSMutableArray array];
    27         
    28         //加载歌曲
    29     }
    30     
    31     return _musics;
    32 }
    33 
    34 /**
    35  *  2. 重写allocWithZone:只分配一次内存
    36  */
    37 + (instancetype)allocWithZone:(struct _NSZone *)zone {
    38     
    39     @synchronized(self) { //加互斥锁防止多线程同时进来访问,更加安全,真正的单例
    40         
    41         if (!_music) {
    42             
    43             _music = [super allocWithZone:zone];
    44         }
    45     }
    46     
    47     return _music;
    48 }
    49 
    50 /**
    51  *  3. 既保证了单例(只分配一次内存),又保证了只init一次;
    52  */
    53 + (instancetype)sharedMusicTool {
    54     
    55     @synchronized(self) {
    56         
    57         if (!_music) {
    58             
    59             _music = [[self alloc] init];
    60         }
    61     }
    62     return _music;
    63 }
    64 
    65 /*
    66  *   4. 此方法能保证单例(只分配一次内存),但是初始化多次
    67  
    68  + (instancetype)sharedMusicTool {
    69  
    70  return [[self alloc] init];
    71  }
    72  */
    73 
    74 /**
    75  *  5.copy使用
    76  *
    77  *  1). 遵守coping协议
    78  *  2). 重写协议方法copyWithZone:拦截copy产生新对象
    79  *  3). 不用判断_music是否空,是因为copy的前提是有对象,有对象 所以_music有值
    80  */
    81 - (id)copyWithZone:(NSZone *)zone {
    82     
    83     return _music;
    84 }
    85 @end
    时光见证了成长,还很无知,我想一点点幼稚转为有知!
  • 相关阅读:
    vue 倒计时返回首页
    vue2借助animate.css实现路由动画效果
    CSS3实现文本垂直排列
    button在点击时出现边框
    vue项目中设置背景图片
    Python -处理PDF
    Python学习笔记(1)-列表
    转:Redis 的安装配置介绍
    转:windows xp下如何安装SQL server2000企业版
    转:CodeCube提供可共享、可运行的代码示例
  • 原文地址:https://www.cnblogs.com/foreveriOS/p/5420383.html
Copyright © 2011-2022 走看看