title: Best practice when implementing copyWithZone:
body: <p>I am trying to clear up a few things in my head about implementing <code>copyWithZone:</code>, can anyone comment on the following ...</p>
  
  <pre><code>// 001: Crime is a subclass of NSObject.
  - (id)copyWithZone:(NSZone *)zone {
      Crime *newCrime = [[[self class] allocWithZone:zone] init];
      if(newCrime) {
          [newCrime setMonth:[self month]];
          [newCrime setCategory:[self category]];
          [newCrime setCoordinate:[self coordinate]];
          [newCrime setLocationName:[self locationName]];
          [newCrime setTitle:[self title]];
          [newCrime setSubtitle:[self subtitle]];
      }
      return newCrime;
  }
  
  // 002: Crime is not a subclass of NSObject.
  - (id)copyWithZone:(NSZone *)zone {
      Crime *newCrime = [super copyWithZone:zone];
      [newCrime setMonth:[self month]];
      [newCrime setCategory:[self category]];
      [newCrime setCoordinate:[self coordinate]];
      [newCrime setLocationName:[self locationName]];
      [newCrime setTitle:[self title]];
      [newCrime setSubtitle:[self subtitle]];
      return newCrime;
  }
  </code></pre>
  
  <h1>In 001:</h1>
  
  <ol>
  <li><p>Is it best to write the class name directly <code>[[Crime allocWithZone:zone] init]</code> or should I use <code>[[[self Class] allocWithZone:zone] init]</code>?</p></li>
  <li><p>Is it ok to use <code>[self month]</code> for copying the iVars or should I be accessing the iVars directly i.e. <code>_month</code>?</p></li>
  </ol>