gpt4 book ai didi

iphone - MKMapView 内存使用量随着 setRegion : calls 的增长而失控

转载 作者:行者123 更新时间:2023-12-03 20:16:52 26 4
gpt4 key购买 nike

我有一个 MKMapView 实例,我已以编程方式将其添加到 UIView 中。作为 UI 的一部分,用户可以循环浏览地址列表,并且当用户浏览地址时, map View 会更新以显示每个地址的正确 map 。我创建了一次 map View ,然后简单地使用 setRegion:animated 更改它显示的内容。

问题是,每次更改映射以显示新地址时,我的程序的内存使用量都会增加 200K-500K(如 Instruments 中的内存监视器所报告)。根据对象分配,似乎每次都会发生大量 1.0K Malloc,并且这些 1.0K 分配的“扩展详细信息” Pane 显示负责调用者是 Convert_image_data,并且“扩展详细信息” Pane 显示这是 [MKMapTileView drawLayer:inContext:] 的结果。因此,在我看来,内存使用可能是由于 MKMapView 没有释放它每次重绘 map 所用的内存。事实上,当我根本不显示 map (甚至不将其添加为主 UIView 的 subview )但仍然循环访问地址(这会更改各种 UILabels 和其他显示的信息)时,应用程序的内存使用量确实如此不增加。如果我添加 map View 但从未使用 setRegion: 更新它,则更改为新地址时内存也不会增加。

还有一点信息:如果我转到一个新地址(因此要求 map 显示新地址),内存会如上所述跳转。但是,如果我返回到已显示的地址,则本地图使用旧地址重绘时,内存不会跳转。此外,这种情况也会发生在 3.2 的 iPad(真实设备)和 3.1.2 的 iPhone(同样是真实设备)上。

以下是我初始化 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];

为了响应用户选择的地址,我设置了 map ,如下所示:

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

有什么想法吗?我已经在网上搜索过,但没有看到提到这个问题,而且我已经达到了我的仪器知识的极限。感谢您的任何想法。

最佳答案

当您循环回到原始地址时会发生什么?还会增加吗?

我的想法是,它可能会缓存 map 数据,因此它会自然增加,因为它将其他位置保留在内存中。

关于iphone - MKMapView 内存使用量随着 setRegion : calls 的增长而失控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2901027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com