清除MKSnapshotter内存

时间:2015-02-16 10:57:49

标签: ios memory mkmapsnapshotter

我目前正在使用MKSnapshotter,但我注意到(类似于MKMapView),它坚持高内存消耗,并且永远不会在应用程序的持续时间内释放它。我试过释放内存但没用:

-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[self releaseMKMapSnapshotMem];
}

-(void)releaseMKMapSnapshotMem{
    self.snapshotter=nil;//MKSnapShotter
    self.options=nil;//MKSnapShotterOptions
 }

非常感谢任何帮助。

更新 包含更多细节

MKMapSnapshotOptions * snapOptions= [[MKMapSnapshotOptions alloc] init];
        self.options=snapOptions;
        CLLocation * salonLocation = [[CLLocation alloc] initWithLatitude:self.lat longitude:self.long];
        MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location.coordinate, 300, 300);
        self.options.region = region;
        self.options.size = self.view.frame.size;
        self.options.scale = [[UIScreen mainScreen] scale];

        MKMapSnapshotter * mapSnapShot = [[MKMapSnapshotter alloc] initWithOptions:self.options];
        self.snapshotter =mapSnapShot;
        [self.snapshotter startWithCompletionHandler:^(MKMapSnapshot *snapshot, NSError *error) {
            if (error) {
                NSLog(@"[Error] %@", error);
                return;
            }

            UIImage *image = snapshot.image;
            self.mapImage = image;
            NSData *data = UIImagePNGRepresentation(image);

            [self saveMapDataToCache:data WithKey:mapName];



        }];

1 个答案:

答案 0 :(得分:0)

试试这个:

    MKMapSnapshotOptions * snapOptions= [[MKMapSnapshotOptions alloc] init];
    CLLocation * salonLocation = [[CLLocation alloc] initWithLatitude:self.lat longitude:self.long];
    //location.coordinate or salonLocation.coordinate below????
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location.coordinate, 300, 300);
    snapOptions.region = region;
    snapOptions.size = self.view.frame.size;
    snapOptions.scale = [[UIScreen mainScreen] scale];

    MKMapSnapshotter * mapSnapShot = [[MKMapSnapshotter alloc] initWithOptions: snapOptions];
    [mapSnapShot startWithCompletionHandler:^(MKMapSnapshot *snapshot, NSError *error) {
        if (error) {
            NSLog(@"[Error] %@", error);
            return;
        }
        UIImage *image = snapshot.image;
        NSData *data = UIImagePNGRepresentation(image);

        [self saveMapDataToCache:data WithKey:mapName];

    }];

我做的几乎和你做的差不多只有两点不同:

    options.region = _mapView.region;
    options.size = _mapView.frame.size;

我的_mapView是视图控制器中显示的地图......