嗨我有一个简单的函数,基本上返回一个输入字符串的修剪版本。问题是当我运行仪器和检查是否存在泄漏此函数显示在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;
}
答案 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
消息。