Prototype mode of iOS design mode

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>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.