我正在重复使用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]];
答案 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中的此页面以了解有关自动释放的更多信息。