2011-02-14 33 views
0

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

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

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

你保留返回的字符串,因为没有我不保留它这个字符串被标记为自动释放 – kgutteridge 2011-02-14 08:53:55

+0

。 – 2011-02-14 09:01:46

回答

2

首先,这看起来绝对没什么问题,你确定泄漏是stringWithString:

然后,你不需要也无妨。你可以简单地做:

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

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

我能想到的唯一原因是,如果你运行从没有一个NSAutoReleasePool一个产卵线程的代码,因为[NSString stringWithString:string];有发送给它的autorelease消息。

+0

`-stringWithString:`不一定发送autorelease。如果这个参数不是一个NSMutableString,你可能会返回相同的字符串。 – JeremyP 2011-02-14 09:06:03

3

如果这个代码在一个线程中运行,请确保您有一个autoreleasepool成立。 stringWithString返回一个自动释放对象,并且只有当你的线程有一个autoreleasepool时才会发生。