需要帮助修复内存泄漏 - NSMutableString [英] Need help fixing memory leak - NSMutableString

查看:408
本文介绍了需要帮助修复内存泄漏 - 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:]



任何想法?



提前感谢。

解决方案>

你真的不需要使用可变字符串...特别是因为你的返回类型是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]];

//只是设置outputstring这样...无需担心泄漏的可变字符串然后
outputstring = [outputstring stringByAppendingFormat:@%c,
[wordToShuffle characterAtIndex:randomnum]];
}


return outputstring;

}


Have been playing around with instruments with not much luck in figuring out how to solve this memory leak.

Firstly the code:

-(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;

 }

Instruments is giving me the following:

Leaked Object = NSCFString, Responsible Library = Foundation, Responsible Frame = -[NSPlaceholderMutableString initWithCapacity:]

Any ideas?

Thanks in advance.

解决方案

You don't really need to use a mutable string... especially since your return type is NSString. Just use 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;

}

这篇关于需要帮助修复内存泄漏 - NSMutableString的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆