Я пишу приложение для iPhone, в котором я помещаю большое изображение PNG (1936 × 2967) в MKMapView, используя MKOverlayView. Я немного озадачен тем, как правильно реализовать функцию drawMapRect: в MKOverlayView - нужно ли вручную сегментировать изображение перед его рисованием? Или я должен позволить механизмам MKOverlayView обрабатывать все это?
У меня сложилось впечатление, что до публикации MKOverlayView вы должны были самостоятельно сегментировать изображения для такого рода задач и использовать CATiledLayer. Я подумал, что, возможно, MKOverlayView позаботится обо всей грязной работе.
Реальная причина, по которой я спрашиваю, заключается в том, что, когда я запускаю свое приложение через Инструменты с помощью инструмента выделения, я обнаруживаю, что число живых байтов, которые использует мое приложение, постоянно увеличивается с появлением пользовательского изображения на карте. Сейчас я НЕ сегментирую свое изображение, но я также не вижу записей об утечках памяти в инструменте утечек в Инструментах. Вот мой drawMapRect: функция:
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context{
// Load image from applicaiton bundle
NSString* imageFileName = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"map.png"];
CGDataProviderRef provider = CGDataProviderCreateWithFilename([imageFileName UTF8String]);
CGImageRef image = CGImageCreateWithPNGDataProvider(provider, NULL, true, kCGRenderingIntentDefault);
CGDataProviderRelease(provider);
MKMapRect overlayMapRect = [self.overlay boundingMapRect];
CGRect overlayRect = [self rectForMapRect:overlayMapRect];
// draw image
CGContextSaveGState(context);
CGContextDrawImage(context, overlayRect, image);
CGContextRestoreGState(context);
CGImageRelease(image);
}
Если моя функция drawMapRect: не является причиной этих проблем с памятью, кто-нибудь знает, что это может быть? Благодаря отладке я знаю, что моя viewForOverlay: функция для mapView вызывается только один раз для каждого оверлея, поэтому дело не в том, что память там протекает или что-то в этом роде.
Любой совет приветствуется!
Спасибо, -Matt
РЕДАКТИРОВАТЬ: так получается, что проблема с памятью на самом деле вызвана MKMapView - каждый раз, когда я перемещаю карту, все использование памяти увеличивается очень стабильно и никогда не падает - это не кажется хорошим: (