zoukankan      html  css  js  c++  java
  • IOS 单例模式(非ARC)

     singleton_h :连接字符串和参数

    // ## : 连接字符串和参数
    #define singleton_h(name) + (instancetype)shared##name;
    
    #define singleton_m(name) 
    static id _instance; 
    + (id)allocWithZone:(struct _NSZone *)zone 
    { 
        static dispatch_once_t onceToken; 
        dispatch_once(&onceToken, ^{ 
            _instance = [super allocWithZone:zone]; 
        }); 
        return _instance; 
    } 
     
    + (instancetype)shared##name 
    { 
        static dispatch_once_t onceToken; 
        dispatch_once(&onceToken, ^{ 
            _instance = [[self alloc] init]; 
        }); 
        return _instance; 
    } 
     
    - (oneway void)release 
    { 
     
    } 
     
    - (id)autorelease 
    { 
        return _instance; 
    } 
     
    - (id)retain 
    { 
        return _instance; 
    } 
     
    - (NSUInteger)retainCount 
    { 
        return 1; 
    } 
     
    + (id)copyWithZone:(struct _NSZone *)zone 
    { 
        return _instance; 
    }
    View Code

    调用单例模式  Singleton.h /.m

    #import <Foundation/Foundation.h>
    #import "Singleton.h"
    
    @interface HMMainTool : NSObject
    singleton_h(MainTool)
    @end
    View Code
    #import "HMMainTool.h"
    
    @implementation HMMainTool
    singleton_m(MainTool)
    @end
    View Code

    调用类

    #import "HMViewController.h"
    #import "HMAudioTool.h"
    #import "HMNetTool.h"
    #import "HMMainTool.h"
    
    @interface HMViewController ()
    
    @end
    
    @implementation HMViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        HMAudioTool *audio1 = [[HMAudioTool alloc] init];
        HMAudioTool *audio2 = [HMAudioTool sharedAudioTool];
        NSLog(@"1111%p %p", audio1, audio2);
        
        HMNetTool *net1 = [[HMNetTool alloc] init];
        HMNetTool *net2 = [HMNetTool sharedNetTool];
        NSLog(@"2222%p %p", net1, net2);
        
        HMMainTool *main1 = [[HMMainTool alloc] init];
        HMMainTool *main2 = [HMMainTool sharedMainTool];
        NSLog(@"333%p %p", main1, main2);
    }
    
    @end
    View Code
  • 相关阅读:
    Redis Info详解
    ABAP常用事务码
    ABAP区别CLEAR、REFRESH、FREE
    virtualbox安装增强功能时【未能加载虚拟光盘】
    https://www.safaribooksonline.com/home/
    图文教程教您蓝底照片更换成白底和红底的方法
    URAL1495. One-two, One-two 2(dp)
    URAL1513. Lemon Tale(dp)
    URAL1900 Brainwashing Device(dp)
    Codeforces Round #228 (Div. 1)B
  • 原文地址:https://www.cnblogs.com/liuwj/p/6604649.html
Copyright © 2011-2022 走看看