zoukankan      html  css  js  c++  java
  • 单例模式-用GCD实现

    用GCD实现单例模式的步骤:

    步骤1. 创建头文件 XZSingleton.h,里面代码如下:

    // .h文件
    #define XZSingletonH(name) + (instancetype)shared##name;
    
    // .m文件
    #if __has_feature(objc_arc)
    
        #define XZSingletonM(name) 
        static id _instace; 
     
        + (id)allocWithZone:(struct _NSZone *)zone 
        { 
            static dispatch_once_t onceToken; 
            dispatch_once(&onceToken, ^{ 
                _instace = [super allocWithZone:zone]; 
            }); 
            return _instace; 
        } 
     
        + (instancetype)shared##name 
        { 
            static dispatch_once_t onceToken; 
            dispatch_once(&onceToken, ^{ 
                _instace = [[self alloc] init]; 
            }); 
            return _instace; 
        } 
     
        - (id)copyWithZone:(NSZone *)zone 
        { 
            return _instace; 
        }
    
    #else
    
        #define XZSingletonM(name) 
        static id _instace; 
     
        + (id)allocWithZone:(struct _NSZone *)zone 
        { 
            static dispatch_once_t onceToken; 
            dispatch_once(&onceToken, ^{ 
                _instace = [super allocWithZone:zone]; 
            }); 
            return _instace; 
        } 
     
        + (instancetype)shared##name 
        { 
            static dispatch_once_t onceToken; 
            dispatch_once(&onceToken, ^{ 
                _instace = [[self alloc] init]; 
            }); 
            return _instace; 
        } 
     
        - (id)copyWithZone:(NSZone *)zone 
        { 
            return _instace; 
        } 
     
        - (oneway void)release { } 
        - (id)retain { return self; } 
        - (NSUInteger)retainCount { return 1;} 
        - (id)autorelease { return self;}
    
    #endif

    步骤2. 要实现的单例类,比如 XZDataTool,XZDataTool.h   XZDataTool.m代码分别 如下:

    #import <Foundation/Foundation.h>
    
    @interface XZDataTool : NSObject
    XZSingletonH(DataTool)
    @end
    #import "XZDataTool.h"
    
    @implementation XZDataTool
    XZSingletonM(DataTool)
    @end
  • 相关阅读:
    iOS开发日记1-tableview编辑
    nginx安装-del
    linux服务器su之后变成bash-4.1#
    PhoneGap & HTML5 学习资料网址
    PhoneGap通信机制的实现原理
    Android调用Java WebSevice篇之二
    Android调用Java WebSevice篇之一
    Java开发牛人十大必备网站
    百度地图生产工具
    PS制作圆角透明图片
  • 原文地址:https://www.cnblogs.com/nxz-diy/p/5366597.html
Copyright © 2011-2022 走看看