适用于 iOS 的 Google Maps SDK 不断增加内存使用量
Posted
技术标签:
【中文标题】适用于 iOS 的 Google Maps SDK 不断增加内存使用量【英文标题】:Google Maps SDK for iOS keeps increasing usage of memory 【发布时间】:2013-10-27 07:13:36 【问题描述】:我已经构建了一个在地图上显示标记的简单应用程序,并且我从服务器的 JSON 文件中加载了它的 x,y,这些标记是可点击的,因此一旦您在任何标记上,它就会将您带到另一个 UIViewController
(让我们将其命名为BViewController
)。我已经监控了内存使用情况,所以每次我从BViewController
回到MapViewController
(里面的地图)它只是内存使用量的两倍,我试图将它设置为nill
或从@987654327 中删除它@ ,但没有任何改变
我的项目使用 ARC。
所以请知道如何减少这种使用。 提前致谢
【问题讨论】:
如果 Google Maps SDK 发生内存泄漏,您可能无能为力。首先使用Instruments
检查它不是您的应用程序。也可以考虑使用内置的 Apple 地图。
@RoboticCat 感谢您的回复 :) ,我检查了很多次,但出现了这个问题,我认为是因为重新加载 MapView 并重新分配前一个,您知道如何避免重新加载
我猜这与code.google.com/p/gmaps-api-issues/issues/detail?id=5941 的错误报告有关,是吗?如果是这样,您可以在 MyViewController 中保存对 MapViewController 的引用,因此每次导航到子视图控制器时都不需要重新创建它。
是的,完全相同的问题 :( 感谢您的回复
有关于这个问题的更新吗?
【参考方案1】:
如果不查看更多代码,我无法立即说出导致此问题的原因,但是对于像 GMSMapView 这样的“昂贵”对象,我可能会创建一个类别来创建共享 GMSMapView 并以编程方式添加它(如果您还没有这样做的话) .您的类别可能如下所示:
// GMSMapView+MyAdditions.h
#import <GoogleMaps/GoogleMaps.h>
@interface GMSMapView (MyAdditions)
+ (GMSMapView *)sharedMapView;
@end
// GMSMapView+MyAdditions.m
#import "GMSMapView+MyAdditions.h"
@implementation GMSMapView (MyAdditions)
+ (GMSMapView *)sharedMapView
static GMSMapView *mapView;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
CLLocation *location = [[CLLocation alloc] initWithLatitude:40.7127 longitude:-74.0059];
GMSCameraPosition *cameraPosition = [GMSCameraPosition cameraWithLatitude:location.coordinate.latitude
longitude:location.coordinate.longitude
zoom:16.0];
mapView = [GMSMapView mapWithFrame:[UIScreen mainScreen].bounds camera:cameraPosition];
);
return mapView;
@end
【讨论】:
没有内存泄漏吗?以上是关于适用于 iOS 的 Google Maps SDK 不断增加内存使用量的主要内容,如果未能解决你的问题,请参考以下文章
在使用适用于 iOS 的 Google Maps SDK 和适用于 iOS 的 Google Places 时,我找不到在哪里可以获得 POI 结果
带有适用于 iOS 的 Google Maps SDK 的可拖动标记
使用适用于 iOS 的 Google Maps SDK 优化自定义标记图像性能
适用于 iOS 的 Google Maps SDK 不断增加内存使用量
适用于 iOS 的 Google Maps SDK 要求 GoogleMaps.bundle 成为“复制捆绑资源”下目标的一部分