使用自定义方法潜在的内存泄漏,没有意义

时间:2012-02-04 19:18:31

标签: objective-c ios cocoa-touch memory-management

我有这个方法:

-(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时,该字符串将自动释放。我错过了什么?下面是错误的屏幕抓取:

enter image description here

修改

该方法现在看起来像这样:

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

不再有错误!

1 个答案:

答案 0 :(得分:3)

不,当您使用alloc时,您负责释放它 - 通过release或通过autorelease将其移至自动释放池。

如果您使用[NSString stringWithString:],它将在自动释放池中。