我正在进行一些泄漏测试,我发现泄漏一直困扰着我。我分配了一个MKMapView,并在地图上有一些MKAnnotationView。泄漏的代码在MKAnnotationView的initWithAnnotation:
中self.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
当我评论该行时,代码不再泄漏。
只有在选择注释时才会发生此泄漏,所以我添加了:
if ([_mapView.selectedAnnotations count] == 1) {
GBAnnotation *test = [self.mapView.selectedAnnotations objectAtIndex:0];
[_mapView deselectAnnotation:test animated:NO];
}
在我的MapController的dealloc方法中(我使用ARC,但是dealloc方法也删除了观察者,并将mapview的委托设置为nil)。这有效一段时间,但只有用户的位置蓝点显示时才会泄漏。我也在委托方法中做了一切正确的事情:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation;
Instruments告诉我泄漏的对象是UIButton,UIImageView(看起来像按钮的imageView),然后是一堆UIKit和QuartzCore库对象。
我正在使用Xcode 5.0.2,支持iOS 6和7。