MKOverlayView 性能问题。啥也不做。但慢
Posted
技术标签:
【中文标题】MKOverlayView 性能问题。啥也不做。但慢【英文标题】:MKOverlayView Performance Issue. Doing nothing. But slowMKOverlayView 性能问题。什么也不做。但慢 【发布时间】:2012-03-05 14:59:47 【问题描述】:我在 iPad 上使用以下代码进行了测试。
如果我像下面的代码一样添加 MyOverlay,MKMapView 加载默认地图图块会变慢,即使在 drawMapRect 中什么也不做。
如果我从 MKMapView 中删除 MyOverlay,默认地图图块的加载速度会再次变快。
我想知道调用 drawMapRect 时后台做了什么。
或者下面的代码有什么性能问题?
[代码]
@implementation MyOverlay
-(id) init
self = [super init];
boundingMapRect = MKMapRectWorld;
boundingMapRect.origin.x += 1048600.0;
boundingMapRect.origin.y += 1048600.0;
coordinate = CLLocationCoordinate2DMake(0, 0);
return self;
...
@end
@implementation MyOverlayView
- (id) initWithOverlay:(id<MKOverlay>)overlay
self = [super initWithOverlay:overlay];
...
return self;
- (BOOL) canDrawMapRect:(MKMapRect) sm zoomScale:(MKZoomScale)zoomScale
return true;
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext: CGContextRef)context
return; // do nothing, but map loading become slower 'much'.
@end
【问题讨论】:
【参考方案1】:MKOverlayView 的绘图方法drawMapRect:zoomScale:inContext:
的名字让我想起了UIView 的drawRect
方法。 MKOverlayView 是 UIView 的子类。 UIView 的子类提供此警告:
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
// Drawing code
*/
如果这仍然是一个问题,你应该看看这个 SO 问题,关于 drawRect
的表现:to drawRect or not to drawRect (when should one use drawRect/Core Graphics vs subviews/images and why?)
【讨论】:
以上是关于MKOverlayView 性能问题。啥也不做。但慢的主要内容,如果未能解决你的问题,请参考以下文章
Select2 ajax 正确调用 web 服务,但之后啥也不做