0
我有这样的方法:潜在的内存泄漏,没有意义
-(NSString *)scrambleWordGenerator: (NSUInteger)length {
NSMutableString *scrambledWord = [[NSMutableString alloc] initWithString:@""];
for (int i = 0; i < length; i++) {
NSUInteger randomIndex = arc4random() % [self.arrayOfCharacters count];
NSString *randomCharacter = [NSString stringWithString:[self.arrayOfCharacters objectAtIndex:randomIndex]];
[scrambledWord insertString:randomCharacter atIndex:i];
}
NSString *finalWord = [[NSString alloc] initWithString:scrambledWord];
[scrambledWord release];
return finalWord;
}
它的工作原理,顺顺当当其实,然而在使用Xcode的“分析”功能,它说,finalWord
有潜力内存泄漏。
我想在创建NSString
时使用的预制方式是字符串将被自动释放。我错过了什么?下面是错误的屏幕抓取:
编辑
的方法现在看起来是这样的:
-(NSString *)scrambleWordGenerator: (NSUInteger)length {
NSMutableString *scrambledWord = [[NSMutableString alloc] initWithString:@""];
for (int i = 0; i < length; i++) {
NSUInteger randomIndex = arc4random() % [self.arrayOfCharacters count];
NSString *randomCharacter = [NSString stringWithString:[self.arrayOfCharacters objectAtIndex:randomIndex]];
[scrambledWord insertString:randomCharacter atIndex:i];
}
NSString *finalWord = [NSString stringWithString:scrambledWord];
[scrambledWord release];
return finalWord;
}
而且没有更多的错误!
提示:你可以用'回替换最后一行[finalWord自动释放]' – Costique 2012-02-04 19:26:59
你俩是惊人的,太感谢你了!我用Simon的建议,但Costique,我会考虑其他方法! – Max 2012-02-04 19:44:40
@LumBerry:显式'autorelease'在'return'语句可以为未来的可读性很有帮助,尤其是在一个较长的方法。另一方面,您必须确保在最初写入时不要将'autorelease'发送给无主对象。 – 2012-02-04 20:11:52