需要帮助修复内存泄漏 – NSMutableString

一直玩弄仪器,没有太多的运气,找出如何解决这个内存泄漏。

首先是代码:

-(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:]

有任何想法吗?

提前致谢。

你真的不需要使用可变string…特别是因为你的返回types是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; } 

看看返回的string在哪里使用。 可能是你保留它,并释放保留string的对象,而不是先释放保留的string。 仪器仍然将这部分代码指向“泄漏”的对象。 最难的部分是find“泄密者”。 是的,你可以泄漏一个string,我只是写了食谱。