最初に NSObject の「値」が宣言され、次に「値」内の switch ステートメントが実際に作成される for ループがあります。「値」は、NSNumber、NSDate、NSData、NSString、または nil にすることができます。これはコードです:
for (int i = 0; i < 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)
今、「価値」を解放する方法がわかりません。これは私が試したものと、対応するXcode 4の「アナライザー」メッセージです:
- リリースなし - >「潜在的なリーク」
- [value autorelease] 各 case ステートメント内の alloc/init の後 -> 「オブジェクトが autorelease を何度も送信しました」
- [value autorelease] 最後の使用の直前 -> 「オブジェクトが autorelease を送信した回数が多すぎます」
- [値の解放] 最後の使用後 -> 「この時点で呼び出し元が所有していないオブジェクトの参照カウントの誤ったデクリメント」