运气不好的乐器一直在弄清楚如何解决此内存泄漏问题。
首先是代码:
-(NSString *) randomizeHint:(NSString *) wordToShuffle{
NSMutableString * outputstring = [NSMutableString stringWithCapacity:[wordToShuffle length]];
NSMutableSet * usedNumberSet = [NSMutableSet setWithCapacity:[wordToShuffle length]];
for (int i=0; i<[wordToShuffle length]; i++) {
int randomnum = arc4random()%[wordToShuffle length];
while ([usedNumberSet containsObject:[NSNumber numberWithInt:randomnum]]==YES) {
randomnum = arc4random()%[wordToShuffle length];
}
[usedNumberSet addObject:[NSNumber numberWithInt:randomnum]];
[outputstring appendFormat:@"%c",[wordToShuffle characterAtIndex:randomnum]];
}
CCLOG(@"outputstring is:%@",outputstring);
return outputstring;
}
仪器给我以下信息:
Leaked Object = NSCFString, Responsible Library = Foundation, Responsible Frame = -[NSPlaceholderMutableString initWithCapacity:]
有任何想法吗?
提前致谢。
最佳答案
您实际上不需要使用可变字符串...尤其是因为您的返回类型是NSString。只需使用stringByAppendingFormat:
-(NSString *) randomizeHint:(NSString *) wordToShuffle{
NSString * outputstring = @"";
NSMutableSet * usedNumberSet = [NSMutableSet setWithCapacity:[wordToShuffle length]];
for (int i=0; i<[wordToShuffle length]; i++) {
int randomnum = arc4random()%[wordToShuffle length];
while ([usedNumberSet containsObject:[NSNumber numberWithInt:randomnum]]==YES) {
randomnum = arc4random()%[wordToShuffle length];
}
[usedNumberSet addObject:[NSNumber numberWithInt:randomnum]];
// just set outputstring like so... no need to worry about a leaky mutable string then
outputstring = [outputstring stringByAppendingFormat:@"%c",
[wordToShuffle characterAtIndex:randomnum]];
}
return outputstring;
}