"ios development" Singleton mode design (ARC & MRC)
Last Update:2015-10-04
Source: Internet
Author: User
<span id="Label3"></p><p><p> </p></p><p><p>For Arc & MRC</p></p><p><p> </p></p><pre><span style="color: #008080;"><span style="color: #008080;">1</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">helps implement a single-case design pattern</span></span><span style="color: #008080;"><span style="color: #008080;">2</span></span> <span style="color: #008080;"><span style="color: #008080;">3</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">implementation of The. H file</span></span><span style="color: #008080;"><span style="color: #008080;">4</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">#define</span></span>Singletonh (methodName) + (instancetype) shared# #methodName;<span style="color: #008080;"><span style="color: #008080;">5</span></span> <span style="color: #008080;"><span style="color: #008080;">6</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">implementation of the. m file</span></span><span style="color: #008080;"><span style="color: #008080;">7</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">#if</span></span>__has_feature (objc_arc)<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">It's arc</span> .</span><span style="color: #008080;"><span style="color: #008080;">8</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">#define</span></span>Singletonm (methodName)<span style="color: #008080;"><span style="color: #008080;">9</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Static</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span>_instace =<span style="color: #000000;"><span style="color: #000000;">nil;</span></span><span style="color: #008080;"><span style="color: #008080;">Ten</span></span>+ (<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span>) Allocwithzone: (<span style="color: #0000ff;"><span style="color: #0000ff;">struct</span></span>_nszone *<span style="color: #000000;"><span style="color: #000000;">) Zone</span></span><span style="color: #008080;"><span style="color: #008080;"></span> one</span> <span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(_instace = =<span style="color: #000000;"><span style="color: #000000;">Nil) { </span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Static</span></span><span style="color: #000000;"><span style="color: #000000;">dispatch_once_t oncetoken;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>Dispatch_once (&oncetoken, ^<span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>_instace =<span style="color: #000000;"><span style="color: #000000;">[super allocwithzone:zone];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">}); </span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">_instace;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;"></span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span><span style="color: #000000;"><span style="color: #000000;">) Init</span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> at</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Static</span></span><span style="color: #000000;"><span style="color: #000000;">dispatch_once_t oncetoken;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>Dispatch_once (&oncetoken, ^<span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>_instace =<span style="color: #000000;"><span style="color: #000000;">[super init];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">}); </span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">_instace;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008080;"><span style="color: #008080;"></span> in</span> <span style="color: #000000;"><span style="color: #000000;"></span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>+<span style="color: #000000;"><span style="color: #000000;">(instancetype) shared# #methodName</span></span><span style="color: #008080;"><span style="color: #008080;"></span> to</span> <span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">[[self alloc] init];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>+ (<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span>) Copywithzone: (<span style="color: #0000ff;"><span style="color: #0000ff;">struct</span></span>_nszone *<span style="color: #000000;"><span style="color: #000000;">) Zone</span></span><span style="color: #008080;"><span style="color: #008080;"></span> *</span> <span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> $</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">_instace;</span></span><span style="color: #008080;"><span style="color: #008080;">Panax Notoginseng</span></span> <span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;"></span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>+ (<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span>) Mutablecopywithzone: (<span style="color: #0000ff;"><span style="color: #0000ff;">struct</span></span>_nszone *<span style="color: #000000;"><span style="color: #000000;">) Zone</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">_instace;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;">}</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span> <span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">#else</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Not arc</span> .</span><span style="color: #008080;"><span style="color: #008080;"></span> $</span> <span style="color: #008080;"><span style="color: #008080;"></span> $</span> <span style="color: #0000ff;"><span style="color: #0000ff;">#define</span></span>Singletonm (methodName)<span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Static</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span>_instace =<span style="color: #000000;"><span style="color: #000000;">nil;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>+ (<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span>) Allocwithzone: (<span style="color: #0000ff;"><span style="color: #0000ff;">struct</span></span>_nszone *<span style="color: #000000;"><span style="color: #000000;">) Zone</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(_instace = =<span style="color: #000000;"><span style="color: #000000;">Nil) { </span></span><span style="color: #008080;"><span style="color: #008080;">Wuyi</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Static</span></span><span style="color: #000000;"><span style="color: #000000;">dispatch_once_t oncetoken;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>Dispatch_once (&oncetoken, ^<span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>_instace =<span style="color: #000000;"><span style="color: #000000;">[super allocwithzone:zone];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> wu</span> <span style="color: #000000;"><span style="color: #000000;">}); </span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008080;"><span style="color: #008080;"></span> about</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">_instace;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> $</span> <span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;"></span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span><span style="color: #000000;"><span style="color: #000000;">) Init</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> a</span> <span style="color: #0000ff;"><span style="color: #0000ff;">Static</span></span><span style="color: #000000;"><span style="color: #000000;">dispatch_once_t oncetoken;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span>Dispatch_once (&oncetoken, ^<span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>_instace =<span style="color: #000000;"><span style="color: #000000;">[super init];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">}); </span></span><span style="color: #008080;"><span style="color: #008080;"></span> $</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">_instace;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;"></span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>+<span style="color: #000000;"><span style="color: #000000;">(instancetype) shared# #methodName</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">[[self alloc] init];</span></span><span style="color: #008080;"><span style="color: #008080;"></span> in</span> <span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;"></span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>-(oneway<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span><span style="color: #000000;"><span style="color: #000000;">) Release</span></span><span style="color: #008080;"><span style="color: #008080;"></span> about</span> <span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;"></span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;"></span></span><span style="color: #008080;"><span style="color: #008080;"></span> +</span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span><span style="color: #000000;"><span style="color: #000000;">) Retain</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;">self <span style="color: #000000;">;</span></span><span style="color: #008080;"><span style="color: #008080;">Bayi</span></span> <span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;"></span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>-<span style="color: #000000;"><span style="color: #000000;">(nsuinteger) Retaincount</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span> <span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>+ (<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span>) Copywithzone: (<span style="color: #0000ff;"><span style="color: #0000ff;">struct</span></span>_nszone *<span style="color: #000000;"><span style="color: #000000;">) Zone</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">_instace;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> -</span> <span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;"> </span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span>+ (<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span>) Mutablecopywithzone: (<span style="color: #0000ff;"><span style="color: #0000ff;">struct</span></span>_nszone *<span style="color: #000000;"><span style="color: #000000;">) Zone</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #008080;"><span style="color: #008080;">94</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">_instace;</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #000000;"><span style="color: #000000;">}</span></span><span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #008080;"><span style="color: #008080;"></span> the</span> <span style="color: #0000ff;"><span style="color: #0000ff;">#endif</span></span></pre><p><p></p></p><p><p>OC Use (arc)</p></p><p><p>Copy directly to an. H file, e.g. Singleton.h</p></p><p><p>How to Use:</p></p><p><p>1> Import header File #import "singleton.h"</p></p><p><p>2> Direct Use in. h</p></p><p><p>Singletonh (methodName)-----> similar to + (instancetype) Sharedmethodname method</p></p><p><p>3> Direct Use in. h</p></p><p><p>Singletonm (methodName)-----> is the equivalent of achieving</p></p> <ul> <ul> <li style="list-style-type: none;"> <ul> <li>+ (instancetype) Sharedmethodname</li> <li>+ (id) allocwithzone: (struct _nszone *) Zone</li> <li><p>-(id) Init</p></li> </ul></li> </ul> </ul><p><p></p></p><p><p>Note: this way, shared way and allock, will only create one singleton object</p></p><p><p>"ios development" Singleton mode design (ARC & MRC)</p></p></span>