2011-12-30 63 views
1

我正在重复使用surl,所以它好像会泄漏。但乐器不显示链接。我不能理解如何在不创建垃圾字符串的情况下重用它。为什么不是这个目标-c IOS代码泄漏?

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

ObjC现在有不错的GC吗? – cHao 2011-12-30 04:19:48

+0

@cHao Objective C for Mac OS X开发可以使用GC。对于iOS,没有GC。但是在iOS 5 sdk中,他们添加了[ARC](http://clang.llvm.org/docs/AutomaticReferenceCounting.html) – 2011-12-30 04:31:50

回答

1

看这句话:

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

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

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

我没有看到有或没有ARC的泄漏。

0

此代码没有泄漏,因为它使用'autoreleased'对象。

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

有关autorelease的更多信息,请参阅Apple的Advanced Memory Management Programming Guide中的此页。

+0

谢谢您的链接!和反馈! – GeorgeInKansas 2011-12-31 03:18:40