2011-01-26 3 views
0

사용자가 맵 뷰의 핀 콜 아웃에서 올바른 설명 선 액세서리를 탭하면 그 안에 뷰가있는 popovercontroller가 표시됩니다. 이 2 mapController 유지 된 속성을 유지하고있다. 나는 mapcontroller의 dealloc에서도 이러한 속성을 발표하고 있는데, 아마도 그런 일은 결코 일어나지 않을 것이다.Popover 컨트롤러 및 내용보기에 대한 메모리 관리

사용자가 주석보기의 선택을 취소하면이 모든 메모리가 해제되기를 원하지만 아무 것도 할당하지 않습니까?

- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view 
{ 
    [self.informationViewController.view removeFromSuperview]; //remove from popovercontroller 
    self.informationViewController = nil; 
    popoverController = nil; 
} 

답변

0

예. 그렇습니다. 이것은 객체의 참조를 nil로 설정하여 객체를 해제합니다. 나는 메모리 관리에 대한 전문가가 아니므로 누군가가 나를 downvote/correct하려고한다면, 자유롭게.

0

나는 또한 당신이 개체를 릴리스해야한다고 생각합니다.

메모리에있는 객체에 대한 포인터 만 제거하면 안됩니다. 개체가 여전히 메모리에 상주하고 여전히 보유 카운터가 할당되어 있으므로 보유 수를 감소시킬 때까지 메모리에서 제거되지 않습니다.

또한, 개체를 릴리스하기 전에 포인터를 nil에 할당함으로써 컨트롤러의 dealloc에서 release를 호출하려고해도 실제로 개체가 해제되지 않으므로 메모리 누수가 발생했다고 의심 할 수 있습니다.

나는 이것에 대해 100 % 확실하지 않지만, 여기는 Memory Management Programming Guide에 대한 링크이기도합니다.

또한 미래에 누수 ​​성능 도구를 사용하여 응용 프로그램을 실행할 수 있으며 메모리 누수 위치와 메모리에 현재 할당 된 개체가 표시되어야합니다.

테스트 프로젝트에서 실제 시나리오를 빠르게 설정하고 누수를 사용하여 모니터하고 나중에 내 대답을 업데이트하려고 할 수 있습니다.

+0

속성이 'retain'으로 선언되고 기본 합성 접근자를 사용하는 경우 해당 접근 자 ("."구문)를 통해 해당 값을'nil '로 설정하면 속성이 해제됩니다. –

+0

아, 좋아. 알아 둘만한. "popovercontroller = nil"부분은 어떨까요? 액세서 메소드를 사용하지 않습니다. 문제가 발생할 수 있습니까? –