OC--init,initialize,initWithCoder:,initWithFrame:各方法的区别和加载顺序

1、先把OC的类分清楚各友善么方法

  • 普通类的方法 
    init 
    initialize:
  • 控制器类的方法 
    init 
    initialize: 
    initWithCoder:
  • UI控件类的方法 
    init 
    initialize: 
    initWithCoder: 
    initWithFrame:

2、init方法 
每个类被创建的时候就会调用init方法

<code class="hljs perl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">Person <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p1</span> = [[Person alloc]init];
Person <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p2</span> = [[Person alloc]init];
Person <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p3</span> = [[Person alloc]init];
Person <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p4</span> = [[Person alloc]init];
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

打印信息

<code class="hljs css has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 10<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:42</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:58</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.852</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[856:19063]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 10<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:42</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:58</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.852</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[856:19063]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 10<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:42</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:58</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.853</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[856:19063]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 10<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:42</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:58</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.853</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[856:19063]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

在有继承关系的情况下,比如Student类继承Person类,那么在不重写子类的init方法时,创建子类对象

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-constant" style="box-sizing: border-box;">Person</span> *p1 = [[<span class="hljs-constant" style="box-sizing: border-box;">Person</span> alloc]init];
<span class="hljs-constant" style="box-sizing: border-box;">Person</span> *p2 = [[<span class="hljs-constant" style="box-sizing: border-box;">Person</span> alloc]init];
<span class="hljs-constant" style="box-sizing: border-box;">Person</span> *p3 = [[<span class="hljs-constant" style="box-sizing: border-box;">Person</span> alloc]init];
<span class="hljs-constant" style="box-sizing: border-box;">Person</span> *p4 = [[<span class="hljs-constant" style="box-sizing: border-box;">Person</span> alloc]init];
<span class="hljs-constant" style="box-sizing: border-box;">Student</span> *s = [[<span class="hljs-constant" style="box-sizing: border-box;">Student</span> alloc] init];


- (instancetype)init{

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> = [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span> init]) {
        <span class="hljs-constant" style="box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Person---init---%@"</span>,[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>]);</span>
    }
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>;
}
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li></ul>

打印信息

<code class="hljs css has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:00</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:43</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.569</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[904:22876]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:00</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:43</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.569</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[904:22876]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:00</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:43</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.569</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[904:22876]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:00</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:43</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.569</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[904:22876]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:00</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:43</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.569</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[904:22876]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Student</span>
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

我们可以看到再一次调用了父类的init,因为父类帮子类创建了对象。 
如果子类重写了init方法,也会先调用父类的init。

3、initialize: 
这个类跟init经常混淆,但是还是有区别的,我们先看看调用的书序

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#import "Person.h"</span>

<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@implementation</span> <span class="hljs-constant" style="box-sizing: border-box;">Person</span>
- (instancetype)init{

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> = [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span> init]) {
        <span class="hljs-constant" style="box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Person---init---%@"</span>,[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>]);</span>
    }
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>;
}

+ (void)initialize{

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ( <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> == [<span class="hljs-constant" style="box-sizing: border-box;">Person</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>]) {</span>
        <span class="hljs-constant" style="box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Person----initialize---%@"</span>,[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>]);</span>
    }
}
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@end</span></code>

<span style="font-family: 'microsoft yahei'; line-height: 26px; background-color: rgb(255, 255, 255);">打印信息</span>
<span style="font-family: 'microsoft yahei'; line-height: 26px; background-color: rgb(255, 255, 255);">
</span>
<span style="font-family: 'microsoft yahei'; line-height: 26px; background-color: rgb(255, 255, 255);"></span><pre class="prettyprint" name="code" style="white-space: nowrap; word-wrap: break-word; box-sizing: border-box; position: relative; overflow-y: hidden; overflow-x: auto; margin-top: 0px; margin-bottom: 1.1em; font-family: 'Source Code Pro', monospace; padding: 5px 5px 5px 60px; font-size: 14px; line-height: 1.45; word-break: break-all; color: rgb(51, 51, 51); border: 1px solid rgba(128, 128, 128, 0.0745098); border-radius: 0px; background-color: rgba(128, 128, 128, 0.0470588);"><code class="hljs css has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:00</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:43</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.568</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[904:22876]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person----initialize---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:00</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:43</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.569</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[904:22876]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:00</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:43</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.569</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[904:22876]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:00</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:43</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.569</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[904:22876]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:00</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:43</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.569</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[904:22876]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);">1</ul>

 
<span style="font-family: 'microsoft yahei'; line-height: 26px; background-color: rgb(255, 255, 255);">可以看到先打印initialize:方法,而且只打印的一次,为什么呢? </span>

在程序运行过程中,它会在你程序中每个类调用一次initialize。这个调用的时间发生在你的类接收到消息之前,但是在它的超类接收到initialize之后。 
系统在第一次使用这个类的时候调用(一个类只会调用一次) 
如果在有继承关系的情况下有三种 
一、父类重写:只有父类调用 
二、子类重写:只有子类调用 
三、父子类重写:父子类调用

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#import "Person.h"</span>

<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@implementation</span> <span class="hljs-constant" style="box-sizing: border-box;">Person</span>
- (instancetype)init{

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> = [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span> init]) {
        <span class="hljs-constant" style="box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Person---init---%@"</span>,[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>]);</span>
    }
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>;
}

+ (void)initialize{

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ( <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> == [<span class="hljs-constant" style="box-sizing: border-box;">Person</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>]) {</span>
        <span class="hljs-constant" style="box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Person----initialize---%@"</span>,[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>]);</span>
    }
}
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@end</span>

<span class="hljs-constant" style="box-sizing: border-box;">Alex</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2015</span>/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">14</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">11</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">17</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">25</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#import "Student.h"</span>

<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@implementation</span> <span class="hljs-constant" style="box-sizing: border-box;">Student</span>

- (instancetype)init{

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> = [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span> init]) {
        <span class="hljs-constant" style="box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Student---init"</span>);
    }
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>;
}


+ (void)initialize{

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ( <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> == [<span class="hljs-constant" style="box-sizing: border-box;">Student</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>]) {</span>
        <span class="hljs-constant" style="box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Student----initialize---%@"</span>,[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span>]);</span>
    }
}
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@end</span>
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li></ul><div class="save_code tracking-ad" data-mod="popu_249" style="box-sizing: border-box; position: absolute; width: 105px; height: 60px; right: 30px; top: 5px; color: rgb(255, 255, 255); cursor: pointer; z-index: 2;"><a target=_blank style="color: rgb(202, 0, 0); box-sizing: border-box;"><img src="http://static.blog.csdn.net/images/save_snippets.png" style="border: none; box-sizing: border-box; max-width: 100%;" alt="" /></a></div>
<code class="hljs perl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"> Person <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p1</span> = [[Person alloc]init];
    Person <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p2</span> = [[Person alloc]init];

    Student <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*s</span> = [[Student alloc] init];
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
<code class="hljs css has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:17</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:54</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.500</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[970:26330]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person----initialize---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:17</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:54</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.501</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[970:26330]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:17</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:54</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.501</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[970:26330]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Person</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:17</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:54</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.501</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[970:26330]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Student----initialize---Student</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:17</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:54</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.502</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[970:26330]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Person---init---Student</span>
2015<span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">-10-14</span> 11<span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:17</span><span class="hljs-pseudo" style="color: rgb(0, 0, 0); box-sizing: border-box;">:54</span><span class="hljs-class" style="box-sizing: border-box; color: rgb(155, 112, 63);">.502</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">afgasdgsdfsd</span><span class="hljs-attr_selector" style="color: rgb(0, 136, 0); box-sizing: border-box;">[970:26330]</span> <span class="hljs-tag" style="color: rgb(0, 0, 0); box-sizing: border-box;">Student---init</span></code>

4、initWithCoder: 
这个方法时遵守了NSCoding协议 
苹果官方的解释是:


<code class="hljs applescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">The NSCoding protocol declares <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">the</span> two methods <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">that</span> a <span class="hljs-type" style="box-sizing: border-box;">class</span> must implement so <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">that</span> instances <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">of</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">that</span> <span class="hljs-type" style="box-sizing: border-box;">class</span> can be encoded <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> decoded. This capability provides <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">the</span> basis <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> archiving (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">where</span> objects <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> other structures are stored <span class="hljs-function_start" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">on</span></span> disk) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> distribution (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">where</span> objects are copied <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> different address spaces).

In keeping <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">with</span> object-oriented design principles, an object being encoded <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> decoded <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> responsible <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> encoding <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> decoding <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">its</span> instance variables. A coder instructs <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">the</span> object <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> do so <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">by</span> invoking encodeWithCoder: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> initWithCoder:. encodeWithCoder: instructs <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">the</span> object <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> encode <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">its</span> instance variables <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">the</span> coder provided; an object can receive this method any <span class="hljs-type" style="box-sizing: border-box;">number</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">of</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">times</span>. initWithCoder: instructs <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">the</span> object <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> initialize itself <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">from</span> data <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">the</span> coder provided; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span> such, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">it</span> replaces any other initialization method <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> sent only once per object. Any object <span class="hljs-type" style="box-sizing: border-box;">class</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">that</span> should be codable must adopt <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">the</span> NSCoding protocol <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> implement <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">its</span> methods.

It <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> important <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> consider <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">the</span> possible types <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">of</span> archiving <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">that</span> a coder supports. On OS X <span class="hljs-property" style="box-sizing: border-box;">version</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10.2</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> later, keyed archiving <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> preferred. You may, however, need <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> support classic archiving. For details, see Archives <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> Serializations Programming Guide.</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"></ul>

NSCoding协议声明了两个方法,一个类必须实现,因此这类的实例可以编码和解码。此功能提供了依据归档(对象和其他结构存储在磁盘上)和销售(对象被复制到不同地址空间)。

符合面向对象的设计原则,一个物体被编码或解码负责编码和解码实例变量。这样做的一个编码器指示对象通过调用encodeWithCoder:或initWithCoder:。encodeWithCoder:指示对象实例变量提供的编码器,编码一个对象可以接收这个方法任意次数。initWithCoder:指示对象初始化本身从编码器提供的数据;因此,它将取代任何其他初始化方法和每个对象只发送一次。任何对象类,应该codable必须采用NSCoding协议和实现它的方法。

考虑到可能的存档类型是很重要的,一个编码器支持。在OS X 10.2及以后版本,键控存档者优先。然而,你可能需要支持经典存档。,档案和序列化编程指南。

<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  从文件中解析一个对象的时候就会调用这个方法
 *  通过xib或者storyboard创建UI控件就会调用这个方法
 */</span>
- (id)initWithCoder:(NSCoder *)decoder
{
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (self = [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span> initWithCoder:decoder]) {
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 代码</span>
    }
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> self;
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li></ul>

要编码的对象,必须实现NSCoding协议。

@protocol NSCoding

-(void) encoderWithCoder:(NSCoder *) aCoder;

-(id) initWithCoder:(NSCoder *) aDecoder;

@end

当对象需要保存自身时-encoderWithCoder:方法被调用

当对象需要加载自身时-initWithCoder:方法被调用

作用:通过xib或者storyboard创建UI控件就会调用这个方法

5、initWithFrame: 
一般创建UI对象有两种方式。 
一种是通过nib,一种是通过代码。 
如果是通过代码创建,那么就会调用这个方法,进行frame的部署,还有控件的创建。但是在这个方法中创建控件并且设置尺寸的话,你会发现UI控件不会显示。为什么呢?因为initWithFrame:调用时,frame是0,没有尺寸的,所以根据这个frame设置UI控件的frame自然也为空。一般在这个方法中初始化UI控件。在layoutSubviews方法设置UI控件的frame。

<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  通过代码创建控件的时候就会调用
 */</span>
- (id)initWithFrame:(CGRect)frame
{
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (self = [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span> initWithFrame:frame]) {
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 初始化UI控件</span>
    }
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> self;
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>
<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 *  UI控件重新部署
 */</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)layoutSubviews{

    [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span> layoutSubviews];
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 设置UI控件的frame</span>
}</code>

原文地址:http://blog.csdn.net/u012592258/article/details/49123391

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值