title: In ARC, why is self in init methods a consumed parameter?
body: <p>I want to understand ARC, and I'm reading this:</p>
  
  <blockquote>
    <p><a href="http://clang.llvm.org/docs/AutomaticReferenceCounting.html#consumed-parameters">http://clang.llvm.org/docs/AutomaticReferenceCounting.html#consumed-parameters</a></p>
  </blockquote>
  
  <p>It says that a <em>consumed</em> parameter is retained before the call, and released at the end of the function (inside the function body). It then says that <code>init...</code> methods are effectively marked with <code>ns_consumes_self</code>. I don't see the point.</p>
  
  <pre><code>Foo *foo = [[Foo alloc] initWithWhatever: x];
  </code></pre>
  
  <p>So <code>alloc</code> returns an object with a retain count of 1, right? Now it is retained <em>again</em> before going into <code>init</code>, and then released at the end of <code>init</code>, so we're back at 1. Why is it designed like this?  When I think about what the typical <code>init</code> looks like, I get more confused.</p>
  
  <pre><code>self = [super init];
  if (self) { ... } 
  return self;
  </code></pre>