1

私のiPhoneアプリにはマップビューがあります。ここでは、Web サーバーからのデータに応じて多数のピン ビューを表示しています。これが私がそれに使用した方法です。

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    NSString *identifier = @"myPin";
    self.pinView = (MKPinAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    if (self.pinView == nil) {
        self.pinView= [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier]autorelease];     //11.1%
    } else {
        self.pinView.annotation = annotation;
    }
    UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];  //20.4%
    [rightButton setTitle:annotation.title forState:UIControlStateNormal];
    self.pinView.rightCalloutAccessoryView = rightButton;   //2.7%

    MyAnnotation *annot = (MyAnnotation*)annotation;

    UIImageView *egoimageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"defaultPerson"]];    //17.5%
    NSString *imageUrl = [NSString stringWithFormat:@"%@%@", CommonImageURL, [friendsProfileImageArray objectAtIndex:annot.tag]];     //9.4%

    if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
        ([UIScreen mainScreen].scale == 2.0)) {
        // Retina display
        [egoimageView setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:[UIImage imageNamed:@"defaultPerson@2x.png"]];    //2.6%

        egoimageView.image = [UIImage imageWithCGImage:egoimageView.image.CGImage scale:egoimageView.image.size.width/25 orientation:egoimageView.image.imageOrientation];
    } else {
        // non-Retina display
        [egoimageView setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:[UIImage imageNamed:@"defaultPerson.png"]];    //14.6%

        egoimageView.image = [UIImage imageWithCGImage:egoimageView.image.CGImage scale:egoimageView.image.size.width/25 orientation:egoimageView.image.imageOrientation];   //1.6%
    }

    [egoimageView sizeToFit];
    self.pinView.leftCalloutAccessoryView = egoimageView;    //3.1%
    [egoimageView release];
    self.pinView.canShowCallout=YES;
    self.pinView.animatesDrop=YES;

    //pin color based on status.....
    if ([annot.relationshipStatus intValue]==2 )
        self.pinView.pinColor=MKPinAnnotationColorGreen;
    else
        self.pinView.pinColor=MKPinAnnotationColorPurple;    //17.1%

    return self.pinView;
}

これで、メモリ割り当てのパーセンテージについて言及しました。マップを継続的にロードすると、合計メモリ使用量が増加し、アプリがクラッシュします。どうすればこれを適切に修正できますか? 私はそれを修正しようとしましたが、これ以上何ができるかわかりません。

助けてください、事前に感謝します。

4

0 に答える 0