gpt4 book ai didi

ios - iOS 6.0 或更高版本中的 MKMapView 内存问题

转载 作者:行者123 更新时间:2023-12-01 17:56:57 26 4
gpt4 key购买 nike

IOS 6.0 是否为MKMapview 占用更多内存?在 IOS 应用程序中缩放/拖动时,比 MKMapview用于ios5.0还是5.1?
它在缩放时给我内存警告mkmapviewios6.0

    - (MKAnnotationView *)mapView:(MKMapView *)mapView1 viewForAnnotation:(id <MKAnnotation> )annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
{
((MKUserLocation *)annotation).title = kCurrentLocation;
return nil;
}

if (annotation == self.calloutAnnotation)
{
CalloutMapAnnotationView *calloutMapAnnotationView=nil;

if (calloutMapAnnotationView==nil){
calloutMapAnnotationView = (CalloutMapAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CalloutAnnotation"];
calloutMapAnnotationView = [[CalloutMapAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CalloutAnnotation"];

UIImageView *calloutImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,285,109)];
calloutImageView.image = [UIImage loadImageFromBundle:@"map-pop"];
[calloutMapAnnotationView addSubview:calloutImageView];
[calloutImageView bringSubviewToFront:calloutMapAnnotationView];

CGRect frame1,btnframe,btnframe2;
int font1;

frame1 = CGRectMake(14,10,270,35);
//frame for subitle label of map annotation view.
btnframe = CGRectMake(12,53,80,25);
btnframe2= CGRectMake(btnframe.size.width+20,btnframe.origin.y,btnframe.size.width+35, btnframe.size.height);
font1 = 14.0;

calloutMapAnnotationView.calloutTitleLabel=nil;
calloutMapAnnotationView.calloutTitleLabel = [[UILabel alloc]initWithFrame:frame1];
calloutMapAnnotationView.calloutTitleLabel.numberOfLines = 2;
calloutMapAnnotationView.calloutTitleLabel.layer.cornerRadius=6;
[calloutMapAnnotationView.calloutTitleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:font1]];
[calloutMapAnnotationView.calloutTitleLabel setBackgroundColor:[UIColor clearColor]];
[calloutMapAnnotationView.calloutTitleLabel setTextColor:[UIColor whiteColor]];

calloutMapAnnotationView.infoButton = [UIButton buttonWithType:UIButtonTypeCustom];
[calloutMapAnnotationView.infoButton setBackgroundImage:[UIImage loadImageFromBundle:@"blank-btn"] forState:UIControlStateNormal];
[calloutMapAnnotationView.infoButton setTitle:kInfo forState:UIControlStateNormal];
[[calloutMapAnnotationView.infoButton titleLabel ]setFont:[UIFont fontWithName:@"Helvetica-Bold" size:font1-1]];
[calloutMapAnnotationView.infoButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
calloutMapAnnotationView.infoButton.frame = btnframe;
calloutMapAnnotationView.infoButton.exclusiveTouch = YES;
[calloutMapAnnotationView.infoButton addTarget:self action:@selector(buttonPressedAction:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchCancel];
[calloutMapAnnotationView addSubview:calloutMapAnnotationView.infoButton];
[calloutMapAnnotationView.infoButton bringSubviewToFront:calloutMapAnnotationView];
[calloutMapAnnotationView addSubview:calloutMapAnnotationView.calloutTitleLabel];
// infoButton=nil;

calloutMapAnnotationView.routeButton = [UIButton buttonWithType:UIButtonTypeCustom];//inDark
[calloutMapAnnotationView.routeButton setBackgroundImage:[UIImage loadImageFromBundle:@"blank-btn"] forState:UIControlStateNormal];
calloutMapAnnotationView.routeButton.frame = btnframe2;
[calloutMapAnnotationView.routeButton setTitle:kRouteDraw forState:UIControlStateNormal];
[[calloutMapAnnotationView.routeButton titleLabel ]setFont:[UIFont fontWithName:@"Helvetica-Bold" size:font1-1]];
[calloutMapAnnotationView.routeButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
calloutMapAnnotationView.routeButton.exclusiveTouch = YES;
calloutMapAnnotationView.routeButton.tag = well_ID;
[calloutMapAnnotationView.routeButton addTarget:self action:@selector(showRouteView:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchCancel];
[calloutMapAnnotationView addSubview:calloutMapAnnotationView.routeButton];

}

calloutMapAnnotationView.calloutTitleLabel.text = self.titleStr;

NSLog(@"well id---%d",well_ID);
calloutMapAnnotationView.infoButton.tag = well_ID;

int locationId=[[resultDict objectForKey:@"uid"] intValue];

if(well_ID!=locationId)
{
calloutMapAnnotationView.routeButton.hidden = NO;
calloutMapAnnotationView.routeButton.tag = well_ID;
[calloutMapAnnotationView.routeButton bringSubviewToFront:calloutMapAnnotationView];
}else{
calloutMapAnnotationView.routeButton.hidden = YES;
}
calloutMapAnnotationView.parentAnnotationView = self.selectedAnnotationView;
calloutMapAnnotationView.mapView = mapView;

return calloutMapAnnotationView;
} else {
static NSString *defaultPinID = @"Pin";
MKAnnotationView* pin = (MKAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier: defaultPinID];
int annotationValue =[annotation_array indexOfObject:annotation];
NSString * searchLocationTitle= [annotation title];
if ( pin == nil ) {
pin = (MKAnnotationView*) [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier: defaultPinID];
pin.image = [UIImage loadImageFromBundle:@"logo"];
}
pin.canShowCallout = NO;
if (annotationValue!=0) {
if([searchLocationTitle isEqualToString:kCurrentLocation])
{
pin.image=nil;

}
else if([searchLocationTitle isEqualToString:kSearchedLocation])
{
pin.image=nil;

}
else
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
pin.frame = CGRectMake(-15, 0, 40,65);
} else
{
pin.frame = CGRectMake(-15, 0, 45,70);
}
}
}
else{
return nil;
}
return pin;
}
return nil;
}
以上代码为 viewForannotation mkmapView 的委托(delegate)方法.

最佳答案

由于 6+ map View 使用矢量套件,因此在 4/5 中它使用谷歌地图
我必须告诉你,ios6+ 中的 MKMapView 真的很糟糕。我们花了数周时间让它消耗更少的内存,但新的矢量套件会疯狂地使用内存:/
展示整个世界——繁荣 50mb,展示 cupertino + 30,去 la + 30 去华盛顿特区 + 30 左右......
无事可做..哦,有些事情你可以尝试让它变得更好,但最终问题仍然存在。 map View 无法管理我们切换到谷歌地图sdk。

我们在切换之前所做的事情(有帮助):

  • 我们在多个屏幕上共享一个 map View 。我们有一个 MKMapViewWrapperView
    这很有帮助,因为 map View 在被释放时实际上会“泄漏”,所以我们总是保留它
  • 我们有时会切换 mapType... *这听起来很奇怪)导致 map View 释放一些内存
  • 关于ios - iOS 6.0 或更高版本中的 MKMapView 内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15701990/

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