您好,我有一个简单的函数,基本上返回一个输入字符串的修剪版本。问题是,当我运行instruments & check for leaks时,这个函数会显示100%的泄漏,特别是在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;
}发布于 2011-02-14 17:00:04
如果这段代码是在线程上运行的,请确保设置了自动释放池。stringWithString返回一个自动释放的对象,只有当你的线程有一个自动释放池时才会发生这种情况。
发布于 2011-02-14 16:51:28
首先,在我看来这绝对没问题,你确定泄漏是stringWithString:造成的吗?
那么,你无论如何都不需要它了。您可以简单地这样做:
+ (NSString *) trim:(NSString *)string
{
if (string == nil)
return nil;
return [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}发布于 2011-02-14 16:51:32
我能想到的唯一原因是,如果您从没有NSAutoReleasePool的派生线程运行这段代码,因为[NSString stringWithString:string];有一条autorelease消息发送给它。
https://stackoverflow.com/questions/4990209
复制相似问题