我有一个 for 循环,在开始时声明一个 NSObject“值”,然后实际创建“值”中的 switch 语句。那么“值”可以是 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 之后->“对象发送自动释放太多次”
- [value autorelease] 直接在最后一次使用之前 -> “对象发送 autorelease 太多次”
- [值释放] 最后一次使用后->“此时不由调用者拥有的对象的引用计数递减不正确”