title: Objective C: switch inside loop - how to avoid (potential) memory leak
body: <p>I have a for loop where at the beginning an NSObject "value" is declared and then a switch statement within "value" is actually created. "value" then can be an NSNumber, an NSDate, an NSData, an NSString or nil. This is the code:</p>
  
  <pre><code>for (int i = 0; i &lt; self.columnCount; i++) {
    NSObject *value;
    switch (mysql_fields[i].type) {
      case ...
        ...
      case MYSQL_TYPE_LONG:
        value = [[NSNumber alloc] initWithInt:atoi(row[i])];
        /* [value autorelease]; */  // 2)
        break;
      case MYSQL_TYPE_DECIMAL:
        NSString *decimal = [[NSString alloc] initWithCString:(char *)row[i] encoding:NSUTF8StringEncoding];
        value = [[NSDecimalNumber alloc] initWithString:decimal];
        /* [value autorelease]; */  // 2)
        [decimal release];
        break;
      case ...
        ...
    } // end of switch
  } end of for
  Field *field = [[[Field alloc] initWithRecord:record] autorelease];
  /* [value autorelease]; */  // 3)
  [field setValue:value forKey:@"value"];
  /* [value release]; */  // 4)
  </code></pre>
  
  <p>Now I don't know how to release "value". This is what I tried and the corresponding Xcode 4 "Analyzer" messages:</p>
  
  <ol>
  <li>no release -> "potential leak"</li>
  <li>[value autorelease] after alloc/init within each case statement -> "object sent autorelease too many times"</li>
  <li>[value autorelease] directly before the last use -> "object sent autorelease too many times"</li>
  <li>[value release] after the last use -> "Incorrect decrement of the reference count of an object not owned by the caller at this point"</li>
  </ol>