为什么这个目标-c IOS代码泄漏了?

时间:2011-12-30 04:15:06

标签: xcode ios5 nsstring instruments memory-leaks

我正在重复使用surl所以它似乎会泄漏。但是仪器没有显示链接。我不能理解如何在不创建垃圾字符串的情况下重用它。

NSString *rcode = @"DDD";

NSString *surl = [NSString stringWithFormat: @"http://www.myweather.com/%@_%@.png", rcode, @"7"];
NSURL *url = [NSURL URLWithString: surl]; 
UIImage *image7 = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]]; 

surl = [NSString stringWithFormat: @"http://www.myweather.com/%@_%@.png", rrcode, @"6"];
url = [NSURL URLWithString: surl]; 
UIImage *image6 = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]]; 

surl = [NSString stringWithFormat: @"http://www.myweather.com/%@_%@.png", rrcode, @"5"];
url = [NSURL URLWithString: surl]; 
UIImage *image5 = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]]; 

2 个答案:

答案 0 :(得分:1)

看看这一行:

[NSString stringWithFormat: @"http://www.myweather.com/%@_%@.png", rcode, @"7"];

+[NSString stringWithFormat:]是一个“便利构造函数”,有时称为“便捷方法”,它返回一个你不拥有的NSString,所以除非你选择保留它,否则你没有责任释放它。你自己(你没有)。

基本规则是,如果从以“alloc”,“new”,“copy”或“mutableCopy”开头的方法中获取对象,则您有责任释放它。否则,你没有。

无论是否有ARC,我都没有看到泄漏。

答案 1 :(得分:0)

此代码没有泄漏,因为它使用的是“自动释放”对象。

您编写的所有对象创建代码都使用返回自动释放对象的便捷方法。这意味着当相应的自动释放池将被释放时,这些将被释放。

请参阅Apple的Advanced Memory Management Programming Guide中的此页面以了解有关自动释放的更多信息。