2011-12-30 3 views
1

surl를 재사용하고 있기 때문에 새는 것처럼 보입니다. 그러나 계기는 연결을 보여주지 않는다. 쓰레기 문자열을 만들지 않고도 재사용 할 수있는 방법을 이해하지 않아야합니다. 이 라인에서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

+0

@cHao Mac OS X 개발을위한 목표 C는 GC를 사용할 수 있습니다. iOS의 경우 GC가 없습니다. 하지만 iOS 5 SDK를 사용하여 [ARC] (http://clang.llvm.org/docs/AutomaticReferenceCounting.html) –

답변

1

봐 :

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

+[NSString stringWithFormat:]는 "간이 생성자"입니다, 때로는 그렇게 돈, 소유하지 않은있는 NSString을 반환하는 "편리한 방법"이라고 귀하가 직접 보유하지 않는 한 (귀하가하지 않은) 귀하는 그것을 해제해야 할 의무가 없습니다. 당신이 "ALLOC"로 시작하는 방법에서 개체를 얻을 경우

기본 규칙

는 "복사"또는 "mutableCopy", "새로운"이다, 당신은 그것을 해제 할 책임이 있습니다. 그렇지 않으면, 당신은하지 않습니다.

ARC 유무에 관계없이 누출이 보이지 않습니다.

0

이 코드는 'autoreleased'개체를 사용하고 있기 때문에 유출되지 않습니다.

작성한 모든 오브젝트 작성 코드는 자동으로 해제 된 오브젝트를 리턴하는 편리한 메소드를 사용합니다. 즉, 해당 자동 릴리스 풀이 해제 될 때 릴리스됩니다.

autorelease에 대해 더 자세히 알고 싶다면 Apple의 Advanced Memory Management Programming Guide에서이 페이지를 참조하십시오.

+0

링크를 보내 주셔서 감사합니다! 그리고 피드백! – GeorgeInKansas

관련 문제