2010-05-24 65 views
3

我有一個單一的MKMapView實例,我已經編程添加到UIView。作爲用戶界面的一部分,用戶可以遍歷地址列表,並更新地圖視圖,以便在用戶通過它們時顯示每個地址的正確映射。我創建一次地圖視圖,只需使用setRegion:animated:來更改它顯示的內容。MKMapView內存使用增長失控與setRegion:調用

問題是,每次更改地圖以顯示新地址時,我的程序的內存使用量都會增加200K-500K(正如儀器中的內存監視器所報告的)。根據Object Allocations,似乎每次都會發生很多1.0K Malloc,而這些1.0K分配的Extended Detail窗格顯示Responsible Caller是convert_image_data,而Extended Detail窗格顯示這是[MKMapTileView drawLayer:inContext的:]。所以,我似乎很可能認爲內存使用是由於MKMapView沒有釋放它每次用來重繪地圖的內存。事實上,當我根本沒有顯示地圖(甚至沒有將它添加爲我的主要UIView的子視圖),但仍然通過地址(其中更改各種UILabels和其他顯示的信息)循環,該應用程序的內存使用情況不增加。如果我添加了地圖視圖,但從來沒有用setRegion:來更新它,當更改爲新地址時,內存也不會增加。如果我去一個新的地址(因此要求地圖顯示新的地址),內存跳轉如上所述。但是,如果我返回到已經顯示的地址,則當地圖重新繪製舊地址時,內存不會跳轉。此外,這發生在iPad 3.2(真實設備)上,在iPhone上(同樣是真實設備)和3.1.2。

下面是如何初始化的MKMapView(我只能這樣做一次):

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]; 

而且在響應用戶選擇一個地址,我設置的地圖,像這樣:

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]; 

任何想法?我在網上搜索過,但沒有看到這個問題,我已經達到了我的儀器知識的極限。感謝您的任何想法。

回答

0

當你循環回到原始地址時會發生什麼?它還在增加嗎?

我的想法是,它可能會緩存地圖數據,所以它會自然增加,因爲它將內存中的其他位置。