title: deep mutable copy of a NSMutableDictionary
body: <p>I am trying to create a deep-copy of a NSMutableDictionary and assign it to another NSMutableDictionary. The dictionary contains a bunch of arrays, each array containing names, and the key is an alphabet (the first letter of those names). So one entry in the dictionary is 'A' -> 'Adam', 'Apple'. Here's what I saw in a book, but I'm not sure if it works:</p>
  
  <pre><code>- (NSMutableDictionary *) mutableDeepCopy
  {
      NSMutableDictionary * ret = [[NSMutableDictionary alloc] initWithCapacity: [self count]];
      NSArray *keys = [self allKeys];
  
      for (id key in keys)
      {
          id oneValue = [self valueForKey:key]; // should return the array
          id oneCopy = nil;
  
          if ([oneValue respondsToSelector: @selector(mutableDeepCopy)])
          {
              oneCopy = [oneValue mutableDeepCopy];
          }
          if ([oneValue respondsToSelector:@selector(mutableCopy)])
          {
              oneCopy = [oneValue mutableCopy];
          }
  
          if (oneCopy == nil) // not sure if this is needed
          {   
              oneCopy = [oneValue copy];
          }
          [ret setValue:oneCopy forKey:key];
  
          //[oneCopy release];
      }
      return ret;
  }
  </code></pre>
  
  <ul>
  <li>should the [onecopy release] be there or not?</li>
  <li><p>Here's how I'm going to call this method:</p>
  
  <p><code>self.namesForAlphabets = [self.allNames mutableDeepCopy];</code></p></li>
  </ul>
  
  <p>Will that be ok? Or will it cause a leak? (assume that I declare self.namesForAlphabets as a property, and release it in dealloc). </p>