title: NSCopying: Use of "zone"
body: <p>My classes implement <code>NSCopying</code> like this:</p>
  
  <pre><code>@implementation MyClass
  
  - (id) copyWithZone: (NSZone *) zone {
      MyClass *copy = [[MyClass allocWithZone: zone] init];
  
      // Copy instance variables
  
      return copy;
  }
  
  @end
  </code></pre>
  
  <p>That means the copy is allocated in the required memory zone. In case the object contains instance variables that need to be copied, too, e.g. mutable arrays, should I use their <code>copyWithZone:</code> message and pass the <code>zone</code> along, instead of just calling <code>copy</code>?</p>
  
  <p>Additionally, if there are instance variables that I want to instantiate directly instead of copying an object, will I have to allocate those by using the <code>allocWithZone:</code> class method?</p>