2010-08-05 3 views
1

내 Xcode의 빌드 메뉴에서 "빌드 및 분석"버튼을 눌렀을 때 문제가 발생했습니다. 분석을 통해 나중에 반환하고자하는 변수를 릴리스 할 것을 제안합니다. 코드는 다음과 같습니다.반환 될 변수를 해제하는 방법은 무엇입니까?

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{ 

    //I do some other thing here 

    MKPinAnnotationView *annView= 
     [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"addressLocation"]; 

    //I do some other thing here 

    return annView; 
} 

문제를 일으키지 않고 annView를 릴리스하고 반환 할 수 있습니까?

답변

6

이것은 정확하게 자동 릴리스가 의도 한 것입니다. 그 방법은 그것을 자동으로 릴리즈해야합니다.

이런 종류의 문제에 대해 잘 모르면 memory management guide을 읽어 보시기 바랍니다. 꽤 짧고 모든 것을 잘 설명합니다. 가이드를 이해하면 다시는 궁금하지 않아도됩니다. 오토 릴리즈 풀을 설명

1

autorelease을 보았습니까?

+0

나는 그것을 생각했다. 이 경우 잘 작동하는지 확실하지 않습니다. 내가 객관적으로 매우 초보자이기 때문에 내가 틀렸다면 나에게 알려주기 바란다. –

+2

@Winston Chen : 이것은 정확히'autorelease'가하는 것입니다. – dreamlax

-1

여기에 게시 한 내용에 따라 아니요, 놓아 버린 다음 돌려 보낼 수 없습니다. 다른 코드의 오브젝트에 다른 유지를 설정하는 경우주의해야합니다. nslog 문으로 리턴하기 전에 이것을 쉽게 확인할 수 있습니다.

NSLog (@ "retainCount : % d", [annView retainCount]);

+1

보유 수를 확인하는 것은 좋은 생각이 아닙니다. 그것은 당신에게 정확한 그림을주지 않습니다. – Chuck

1

유용한 Lynda.com 비디오는 여기에 있습니다 :

http://creativemac.digitalmedianet.com/articles/viewarticle.jsp?id=1003156 
+0

감사합니다. 매우 도움이됩니다. –

1

오토 릴리즈 풀을 사용하기위한 완벽한 것입니다. 변수를 반환 할 때 다음을 수행하십시오.

return [myVariable autorelease]; 

많은 사과 메소드가 이것을 사용합니다. [NSString stringWithFormat :]과 같은 애플 클래스의 대부분의 정적 생성자는 자동으로 변수를 반환합니다.

관련 문제