Cra*_*aig 5 cocoa-touch memory-management objective-c ios
我知道这个错误与内存管理有关,但我必须承认我很难过!在目标c中编程大约3周,所有这些管理内存的东西都令人困惑!基本上发生的是我在tableview中有这个mapview.单击后退按钮离开mapview并返回主菜单时,我得到上面的错误.这是Header文件中的代码
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface MapViewController : UIViewController <MKMapViewDelegate> {
    IBOutlet MKMapView* mapView;
    BOOL locate;
}
@property (nonatomic, retain) IBOutlet MKMapView* mapView;
@end
和实施文件
#import "MapViewController.h"
@implementation MapViewController
@synthesize mapView;
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
    mapView = [[MKMapView alloc] initWithFrame:self.view.frame];
    mapView.delegate=self;
    mapView.showsUserLocation = YES;
    [self.view addSubview:mapView];
    [self.mapView.userLocation addObserver:self
                                forKeyPath:@"location"
                                   options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld)
                                   context:nil];
    locate = YES;
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (locate == YES) {
    MKCoordinateRegion region;
    region.center = self.mapView.userLocation.coordinate;
    MKCoordinateSpan span;
    span.latitudeDelta  = 0.1; 
    span.longitudeDelta = 0.1;
    region.span = span;
    [self.mapView setRegion:region animated:YES];
        locate = NO;
    }
}
- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}
- (void)dealloc {
    [super dealloc];
    [mapView release];
    [self.mapView.userLocation removeObserver:self forKeyPath:@"location"];
    [self.mapView removeFromSuperview];
    self.mapView = nil;
}
@end
有人可以为我揭开光明吗?:)
Vik*_*ica 12
[super dealloc]; 必须是最后一次打电话 dealloc
在[mapView release];mapView可能已经消失之后.
尝试
- (void)dealloc {
    [self.mapView.userLocation removeObserver:self forKeyPath:@"location"];
    [self.mapView removeFromSuperview];
    [mapView release];
    self.mapView = nil; 
    [super dealloc];  // at this point self — that is the same object as super — is not existent anymore
}
| 归档时间: | 
 | 
| 查看次数: | 30016 次 | 
| 最近记录: |