stringWithString泄漏内存

时间:2011-02-14 08:45:52

标签: iphone objective-c ios memory-leaks nsstring

嗨我有一个简单的函数,基本上返回一个输入字符串的修剪版本。问题是当我运行仪器和检查是否存在泄漏此函数显示在line stringWithString上100%泄漏。

任何人都可以指导我在这里做错了什么。

+ (NSString *) trim:(NSString *)string
{
    if (string == nil)
        return nil;
    NSString *str = [NSString stringWithString:string];
    str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    //[[NSString stringWithString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]] autorelease];
    return str;
}

3 个答案:

答案 0 :(得分:3)

如果此代码在某个线程上运行,请确保已设置autoreleasepool。 stringWithString返回一个自动释放的对象,这只有在你的线程有自动释放池时才会发生。

答案 1 :(得分:2)

首先,这对我来说绝对没问题,你确定泄漏是stringWithString:吗?

然后,你无论如何都不需要它。你可以这样做:

+ (NSString *) trim:(NSString *)string
{
    if (string == nil)
        return nil;

    return [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

答案 2 :(得分:2)

我能想到的唯一原因是你是否从没有NSAutoReleasePool的spawn线程运行此代码,因为[NSString stringWithString:string];发送了autorelease消息。