単例の完全な書き方

984 ワード

  • 友達がまだ単例の問題で悩んでいるので、どう書けば完備するのか、今日はここで書きます.
  • 注意:一例一で作成したが、Appの使用中は解放されないので、慎重に使用してください.
  • #import 
    
    @interface SUNTool : NSObject
    +(instancetype)shareTool;
    @end
    
    #import "SUNTool.h"
    @implementation SUNTool
    
    //0.      
    static SUNTool *_instance;
    
    //1.alloc-->allocWithZone
    +(instancetype)allocWithZone:(struct _NSZone *)zone
    {
        //               
    //    @synchronized(self) {
    //        if (_instance == nil) {
    //            _instance = [super allocWithZone:zone];
    //        }
    //    }
        
        //         
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _instance = [super allocWithZone:zone];
        });
        return _instance;
    }
    
    //2.     
    +(instancetype)shareTool
    {
        return [[self alloc]init];
    }
    
    //3.  
    -(id)copyWithZone:(NSZone *)zone
    {
        return _instance;
    }
    
    -(id)mutableCopyWithZone:(NSZone *)zone
    {
        return _instance;
    }