2010-05-24 3 views
3

프로그래밍 방식으로 UIView에 추가 한 단일 MKMapView 인스턴스가 있습니다. 사용자 인터페이스의 일부로 사용자는 주소 목록을 탐색 할 수 있으며지도보기는 업데이트되어 각 주소에 대한 올바른지도가 표시됩니다. 한 번지도보기를 만들고 setRegion : animated :로 표시된 내용을 변경합니다.MKMapView 메모리 사용이 setRegion : calls를 사용하여 제어 할 수 없게됩니다.

문제는 맵이 새 주소를 표시하도록 변경 될 때마다 내 프로그램의 메모리 사용이 200K ~ 500K만큼 증가한다는 것입니다 (인스트루먼트의 메모리 모니터에 의해보고 됨). Object Allocations에 따르면 매회 1.0K Mallocs가 많이 발생하고있는 것으로 보입니다.이 1.0K 할당에 대한 Extended Detail 창은 책임 호출자가 convert_image_data이고 Extended Detail 창에 [MKMapTileView drawLayer : inContext :] 그래서, 메모리 사용량은 매번 맵을 다시 그릴 때 사용하는 메모리를 해제하지 않는 MKMapView 때문일 것입니다. 사실,지도를 전혀 표시하지 않고 (심지어 내 주요 UIView의 하위보기로 추가하지 않음) 주소를 통해 순환합니다 (다양한 UILabels 및 기타 표시된 정보가 변경됨) 앱의 메모리 사용량은 증가하지 마십시오. 지도보기를 추가했지만 결코 setRegion :으로 업데이트하지 않으면 새 주소로 변경할 때 메모리가 증가하지 않습니다.

정보가 하나 더 있습니다 : 새 주소로 가면 (따라서지도에 새 주소를 표시하도록 요청하면) 위에서 설명한대로 메모리가 점프됩니다. 그러나 이미 표시된 주소로 돌아 가면지도가 이전 주소로 다시 그려지면 메모리가 이동하지 않습니다. 또한이 문제는 iPad (실제 기기) 3.2 및 iPhone (다시 말하면 실제 기기) 3.1.2에서 발생합니다. 나는 MKMapView를 초기화하는 방법은 다음과

이야 (I는 한 번만 수행) :

MKCoordinateRegion region; 
MKCoordinateSpan span; 
span.latitudeDelta=kStreetMapSpan; // 0.003 
span.longitudeDelta=kStreetMapSpan; // 0.003 

region.center = address.coords;  // coords is CLLocationCoordinate2D 
region.span = span; 

mapView.region.span = span; 
[mapView setRegion:region animated:NO]; 

모든 :

CGRect mapFrame; 
mapFrame.origin.y = 460;    // yes, magic numbers. just for testing. 
mapFrame.origin.x = 0; 
mapFrame.size.height = 500; 
mapFrame.size.width = 768; 
mapView = [[MKMapView alloc] initWithFrame:mapFrame]; 
mapView.delegate = self; 
[self.view insertSubview:mapView atIndex:0]; 

그리고 사용자에게 응답

이 주소를 선택, 나는 맵과 같이 설정 생각? 그물을 샅샅이 뒤졌지만이 문제에 대해 언급 한 적이 없으며 Instruments의 지식의 한계에 도달했습니다. 어떤 아이디어 주셔서 감사합니다.

답변

0

원래 주소로 다시 순환하면 어떻게됩니까? 그것은 여전히 ​​증가합니까?

내 생각에지도 데이터를 캐싱 할 가능성이 높기 때문에 자연스럽게 다른 위치를 메모리에 유지하면서 증가합니다.

관련 문제