iPhone内存泄漏

时间:2011-09-06 20:32:43

标签: iphone objective-c memory-leaks

我得到第55行分配的对象的潜在泄漏并存储到'returnURL'内存泄漏错误。

我的代码

NSString *returnURL = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
return returnURL;
[returnURL release];

请帮忙

2 个答案:

答案 0 :(得分:7)

return之后的任何语句都没有执行。因此,returnURL永远不会被释放。并且您不希望在返回之前释放它,因为您希望为调用者提供保留对象的机会。事实上,这是自动释放的经典例子:

return [returnURL autorelease];

答案 1 :(得分:3)

你应该在返回之前“自动释放”这个NSString:

NSString *returnURL = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
return [returnURL autorelease];

或许多使用的模式是在alloc的站点上简单地自动释放:

NSString *returnURL = [[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding] autorelease];

这基本上意味着你说你不想保留引用,但是你希望它对于事件循环的其余部分保持“活着”,这样你就可以将它传递给你的方法的调用者,然后可以使用它而不用担心所有权。