我有这个方法:
-(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
方法创建init
时,该字符串将自动释放。我错过了什么?下面是错误的屏幕抓取:
修改
该方法现在看起来像这样:
-(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;
}
不再有错误!
答案 0 :(得分:3)
不,当您使用alloc
时,您负责释放它 - 通过release
或通过autorelease
将其移至自动释放池。
如果您使用[NSString stringWithString:]
,它将在自动释放池中。