Reputation: 33
Is IOS 6.0 takes more memory for MKMapview
while zooming/dragging in IOS app, than MKMapview
used in ios5.0
or 5.1?
It give me memory warning while zooming mkmapview
in ios6.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;
}
Above code for viewForannotation
delegate method of mkmapView
.
Upvotes: 1
Views: 1900
Reputation: 1
I have identified that memory leaks when it occurred , when ever you have set MKmapview
type is hybrid. That type of memory leaks occurred.
My advice is simply select satellite
Upvotes: 0
Reputation: 50089
I must tell you that the MKMapView in ios6+ is really really bad. we spent WEEKS getting it to consume less memory but the new vector kit uses memory like crazy :/
show the whole world -- boom 50mb, show cupertino + 30, go to la + 30 go to washington DC + 30 or so...
nothing todo.. oh there's things you can try to make it better but uulimately the problem remains. The map view is unmanageable and we switched to the google maps sdk.
we shared one map view across multiple screens. We had a MKMapViewWrapperView that helped a lot because a map view actually 'leaks' when it is deallocated, so we always kept it around
we sometimes toggled the mapType... that *it sounds weird) causes the map view to free some of its memory
Upvotes: 5