【发布时间】:2012-07-15 13:26:13
【问题描述】:
一直在研究如何解决这个内存泄漏问题,但运气不佳。
首先是代码:
-(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:]
有什么想法吗?
提前致谢。
【问题讨论】:
-
代码似乎正确。在这种情况下,
NSMutableString是自动释放的。你确定这个泄漏是在上面的代码中出现的吗? -
试试
return [outputstring copy]? -
在我看来,如果你在任何地方泄漏一个对象,Instruments 会指向它被创建的位置。会不会是这个例程的调用者泄露了返回的字符串?
-
感谢 cmets 伙计们。 InderKumarRathore - 我认为 NSMutableString 也是自动发布的,这就是难倒的原因。 ZhangChn - 我不想在这个方法之外显式地释放它,它是一个局部变量,所以副本不会为我做。 Phillips Mills - 是的,不幸的是,在仪器进入标准库之前,这是我代码中堆栈跟踪中的最后一个元素。
标签: ios memory-leaks cocos2d-iphone nsstring nsmutablestring