title: Double pointer as Objective-C block parameter
body: <p>Is it possible (and if so, safe) to create/use a block which takes a double pointer as an argument?</p>
  
  <p>For instance:</p>
  
  <p><code>- (void)methodWithBlock:(void (^)(NSError **error))block;</code></p>
  
  <hr>
  
  <p>Additional context, research, and questions:</p>
  
  <ul>
  <li>I'm using ARC.</li>
  <li>When I declare the method above and attempt to call it, XCode autocompletes my method invocation as follows: <code>[self methodWithBlock:^(NSError *__autoreleasing *error) {}];</code>
  What does <code>__autoreleasing</code> mean here and why is it being added? I presume it has something to do with ARC.</li>
  <li>If this <em>is</em> possible and safe, can the pointer still be dereferenced in the block as it would be anywhere else?</li>
  <li>In general, what are the important differences between doing what I'm describing, and simply passing a double pointer as a method parameter (e.g. <code>- (void)methodWithDoublePointer:(NSError **)error;</code>)? What special considerations, if any, should be taken into account (again assuming this is possible at all)?</li>
  </ul>