title: Objective-C naming conventions with ARC and possible caveats
body: <p>I have experience with pure ARC coding. As a compiler feature it honors Objctive-C method family putting right retain/release calls whenever neeeded.</p>
  
  <p>All methods that start with <code>alloc</code>, <code>mutableCopy</code>, <code>copy</code> and <code>new</code> create a new object. They increase the retain count. As a consequence, ARC will release any pointer (and hence the object associated with it) when I no longer need it.</p>
  
  <p>I think that problems could arise when I write methods that do not follow naming conventions. For example, if I write a method like <code>newCustomer</code> that in a first version returns an autoreleased object while in a second version does not, what could happen?</p>
  
  <p>In particular, my questions are the following (they belong to the same reasoning):</p>
  
  <ul>
  <li>What happens if the calling and called code are both compiled with ARC?</li>
  <li><strong>(a)</strong> What happens if the calling code is compiled with ARC while the called is compiled with non-ARC?</li>
  <li><strong>(b)</strong> What happens if the calling code is compiled with non-ARC while the called is compiled with ARC?</li>
  </ul>
  
  <p>It would be appreciated an answer that shows how ARC works under the hood (<code>objc_release</code>, <code>objc_retainAutoreleasedReturnValue</code>, etc.).</p>
  
  <p>Thank you in advance.</p>