我有一個單一的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];
任何想法?我在網上搜索過,但沒有看到這個問題,我已經達到了我的儀器知識的極限。感謝您的任何想法。