我得到第55行分配的对象的潜在泄漏并存储到'returnURL'内存泄漏错误。
我的代码
NSString *returnURL = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
return returnURL;
[returnURL release];
请帮忙
答案 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];
这基本上意味着你说你不想保留引用,但是你希望它对于事件循环的其余部分保持“活着”,这样你就可以将它传递给你的方法的调用者,然后可以使用它而不用担心所有权。