Prototype mode of iOS design mode
Last Update:2016-04-29
Source: Internet
Author: User
<span id="Label3"></p>What's the prototype mode?<p><p><strong>The prototype design pattern is to quickly create a new object by means of a prototype copy.</strong></p></p>The copy is divided into two types: <ol> <ol> <li><p>Shallow copy (same address, different pointer)</p></li> <li><p>Deep copy (different address, complete Independence)</p></li> </ol> </ol>The difference is whether a new address is generated<p><p></p></p><p><p></p></p>When using the prototype model? <ul> <ul> <li><p>The object that needs to be created should be independent of its type and how it was Created.</p></li> <li><p>The class to instantiate is determined at run Time.</p></li> <li><p>Do not want the factory hierarchy to correspond to the product Hierarchy.</p></li> <li><p>The differences between instances of different classes are just a few combinations of states. therefore, copying the corresponding number of prototypes is more convenient than manual Instantiation.</p></li> <li><p>Classes are not easy to create, for example, each component can use other components as a composite object for child Nodes. It is easier to copy an existing composition object and make modifications to the Copy.</p></li> </ul> </ul>Example:<pre class="prettyprint"><pre class="prettyprint"><code class="hljs objectivec"><span class="hljs-preprocessor"> #import <span class="hljs-title"> <foundation/foundation.h> </span> </span> <span class="hljs-class"><span class="hljs-keyword"> @interface </span> <span class="hljs-title">myclass </span>: <span class="hljs-title">nsobject </span> < <span class="hljs-title">nscopying </span>; </span> <span class="hljs-keyword"> @end </span> </code> </pre></pre><pre class="prettyprint"><pre class="prettyprint"><code class=" hljs objectivec"><span class="hljs-preprocessor">#import <span class="hljs-title">"MyClass.h"</span></span><span class="hljs-class"><span class="hljs-keyword">@implementation</span> <span class="hljs-title">MyClass</span></span>-(<span class="hljs-keyword">id</span>)copyWithZone:(NSZone *)zone{ <span class="hljs-built_in">NSLog</span>(@<span class="hljs-string">"调用copy方法"</span>); MyClass *myclass=[[[<span class="hljs-keyword">self</span> class]allocWithZone:zone]init]; <span class="hljs-keyword">return</span> myclass;}<span class="hljs-keyword">@end</span></code></pre></pre><pre class="prettyprint"><code class=" hljs perl"><span class="hljs-comment"><span class="hljs-comment">#import <Foundation/Foundation.h></span></span><span class="hljs-comment"><span class="hljs-comment">#import "MyClass.h"</span></span><span class="hljs-keyword"><span class="hljs-keyword">int</span></span>Main<span class="hljs-keyword"><span class="hljs-keyword">int</span></span>argc, const char * Argv[]) {<span class="hljs-variable"><span class="hljs-variable">@autoreleasepool</span></span>{nsstring<span class="hljs-variable"><span class="hljs-variable">*string</span></span>=<span class="hljs-variable"><span class="hljs-variable">@"</span></span>dddd<span class="hljs-string"><span class="hljs-string">"; NSString <span class="hljs-variable">*stringcopy</span>=[string copy]; Nsmutablestring <span class="hljs-variable">*stringmcopy</span>=[string mutablecopy]; NSLog (<span class="hljs-variable">@ "</span><span class="hljs-variable">%p</span>,<span class="hljs-variable">%p</span>,<span class="hljs-variable">%p</span>"</span></span>, string,stringcopy,stringmcopy); MyClass<span class="hljs-variable"><span class="hljs-variable">*class1</span></span>=[[myclass alloc]init]; MyClass<span class="hljs-variable"><span class="hljs-variable">*class2</span></span>=[class1 copy]; MyClass<span class="hljs-variable"><span class="hljs-variable">*CLASS3</span></span>=class2; NSLog (<span class="hljs-variable"><span class="hljs-variable">@"</span></span>Class1:<span class="hljs-variable"><span class="hljs-variable">%p</span></span>, class2:<span class="hljs-variable"><span class="hljs-variable">%p</span></span>, class3:<span class="hljs-variable"><span class="hljs-variable">%p</span></span><span class="hljs-string"><span class="hljs-string">", class1,class2,class3);} return 0;}</span></span></code></pre><pre class="prettyprint"><code class=" hljs css">2016<span class="hljs-tag"><span class="hljs-tag">-04-24</span></span>20<span class="hljs-pseudo"><span class="hljs-pseudo">:</span></span><span class="hljs-pseudo"><span class="hljs-pseudo">:</span></span><span class="hljs-class"><span class="hljs-class">. 445</span></span> <span class="hljs-tag"><span class="hljs-tag">Copy</span></span><span class="hljs-attr_selector"><span class="hljs-attr_selector">[4184:193787]</span></span> <span class="hljs-tag"><span class="hljs-tag">string</span></span>: 0<span class="hljs-tag"><span class="hljs-tag">x100001060</span></span>,<span class="hljs-tag"><span class="hljs-tag">stringcopy</span></span>: 0<span class="hljs-tag"><span class="hljs-tag">x100001060</span></span>,<span class="hljs-tag"><span class="hljs-tag">stringmcopy</span></span>: 0<span class="hljs-tag"><span class="hljs-tag">x100203930</span></span>2016<span class="hljs-tag"><span class="hljs-tag">-04-24</span></span>20<span class="hljs-pseudo"><span class="hljs-pseudo">:</span></span><span class="hljs-pseudo"><span class="hljs-pseudo">:</span></span><span class="hljs-class"><span class="hljs-class">. 446</span></span> <span class="hljs-tag"><span class="hljs-tag">Copy</span></span><span class="hljs-attr_selector"><span class="hljs-attr_selector">[4184:193787]</span></span>Call<span class="hljs-tag"><span class="hljs-tag">Copy</span></span>Method 2016<span class="hljs-tag"><span class="hljs-tag">-04-24</span></span>20<span class="hljs-pseudo"><span class="hljs-pseudo">:</span></span><span class="hljs-pseudo"><span class="hljs-pseudo">:</span></span><span class="hljs-class"><span class="hljs-class">. 446</span></span> <span class="hljs-tag"><span class="hljs-tag">Copy</span></span><span class="hljs-attr_selector"><span class="hljs-attr_selector">[4184:193787]</span></span> <span class="hljs-tag"><span class="hljs-tag">Class1</span></span><span class="hljs-pseudo"><span class="hljs-pseudo">: 0x100303a80</span></span>,<span class="hljs-tag"><span class="hljs-tag">Class2</span></span><span class="hljs-pseudo"><span class="hljs-pseudo">: 0x100305ba0</span></span>,<span class="hljs-tag"><span class="hljs-tag">CLASS3</span></span><span class="hljs-pseudo"><span class="hljs-pseudo">: 0x100305ba0</span></span><span class="hljs-tag"><span class="hljs-tag"></span> program</span> <span class="hljs-tag"><span class="hljs-tag">ended</span></span> <span class="hljs-tag"><span class="hljs-tag"></span> with</span> <span class="hljs-tag"><span class="hljs-tag">Exit</span></span> <span class="hljs-tag"><span class="hljs-tag">Code</span></span>: 0</code></pre> <p><p>Prototype mode of iOS design mode</p></p></span>