在StringCalculator的Xcode Katas kata之后,我结束了以下课程。
@implementation StringCalculator
- (int) add: (NSString *) string {
// this is marked as a potential memory leak by the `Analyze` tool
NSMutableString *separatorCharacters = [@"\n" mutableCopy];
if ([string hasPrefix:@"//"]) {
NSRange range = NSMakeRange(2, 1);
NSString *additionalSeparator = [string substringWithRange:range];
[separatorCharacters appendString:additionalSeparator];
} else {
[separatorCharacters appendString:@","];
}
NSCharacterSet *separators = [NSCharacterSet characterSetWithCharactersInString:separatorCharacters];
NSArray *numbers = [string componentsSeparatedByCharactersInSet:separators];
// [separatorCharacters release];
int sum = 0;
for (NSString *number in numbers) {
sum += [number intValue];
}
return sum;
}
@end
一切正常,但是当我运行Analyze时,我在方法的第一行遇到了潜在的内存泄漏。如果我最后做了一个手册release
,它似乎满足了分析仪,但我真的不明白为什么会发生这种情况。
例如,创建mutableCopy
与substringWithRange
的区别如何?我不知道如何检查我是否使用ARC,但如果我不是我应该在我创建对象的每一行上泄漏内存吗?
我还认为在ARC项目中调用release
有点被弃用或不必要。
答案 0 :(得分:3)
如果我最后做了手册
release
,它似乎满足了分析仪
您没有使用ARC。 ARC禁止手动释放,这不会编译。检查您的构建设置。