返回autorelease NSString仍然导致内存泄漏

我有一个简单的函数,解码后返回一个NSString。 我在整个应用程序中都会使用它,并且每次使用它时都会产生内存泄漏(根据“泄漏”工具)。 泄漏告诉我,即使我自动释放它,我所分配的NSString将返回的线路上的问题。 这是功能:

-(NSString *) decodeValue
{
 NSString *newString;
 newString = [self stringByReplacingOccurrencesOfString:@"#" withString:@"$"];
 NSData *stateData = [NSData  dataWithBase64EncodedString:newString];
 NSString *convertState = [[[NSString alloc] initWithData:stateData encoding:NSUTF8StringEncoding] autorelease];
 return convertState;
}

我对[autorelease]的理解是,它应该完全按照这种方式使用......我想在这个对象上保持足够长的时间,以便在函数中返回它,然后让对象稍后自动释放。 所以我相信我可以通过这样的代码使用这个函数而不需要手动发布任何东西:

NSString *myDecodedString = [myString decodeValue];  

但是这个过程报告了泄漏,我不知道如何改变它以避免泄漏。 我究竟做错了什么?


我认为泄漏导致你误入歧途。 泄漏会告诉你泄漏的对象最初被分配的位置,不一定与泄漏的原因相同。 这段代码看起来很好 - 可能发生的事情是,这个结果被保留在另一个类的某个地方,从来没有在那里发布。


Jexe是对的,泄漏工具不可能知道泄漏的位置,它只知道实例的创建点,并且在RunLoop结束时表示对象仍然被保留,这就是它指向alloc调用的原因。 这仍然是一个很大的帮助,现在你只需要弄清楚还有谁能够访问convertState并保留它。

链接地址: http://www.djcxy.com/p/53271.html

上一篇: returning autorelease NSString still causes memory leaks

下一篇: When is an autoreleased object actually released?