Я реализую PDF-ридер. Как я пишу код, достаточно для того, чтобы во многих PDF-файлах вдруг появился один единственный pdf-файл с 300 МБ (всего 1000 страниц). PDF работает отлично до 70 страниц позже он убивает мое приложение, я проверяю его в разделе (IPad1, V5.0) и симуляторе (V 5.0). В симуляторе я могу перемещаться со всеми страницами с начала с 1 до последней страницы, но приходя к устройству я не могу сделать that.I видел выделение памяти в «инструменте инструментов» высокое разрешение pdf, вызывающее сбои при навигации между страницами
на поле изображения прямоугольника показывает мне выделение памяти и колеблющееся от использования памяти, для каждой отдельной страницы, недавно оказанной (первый раз после открытия приложение) CGContextDra wPDFPage метод повышения 2Мб memory.I не знаю, почему CGContextDrawPDFPage растет drastically.I видел много блогов на это, но нет никакого смысла и отходы time.Below мой пример кода
otherPageRef = CGPDFDocumentGetPage(myDocumentRef, c);
cropBox = CGPDFPageGetBoxRect(otherPageRef, kCGPDFCropBox);
CGContextSaveGState(ctx);
CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0);
CGContextFillRect(ctx,CGContextGetClipBoundingBox(ctx));
CGFloat aspectRatio=aspectFitSize.width/aspectFitSize.height;
CGRect targetRect = layer.bounds;
CGFloat xScale = targetRect.size.width/cropBox.size.width;
CGFloat yScale = (targetRect.size.height-__TOP_BRANDING_BAR_HEIGHT)/cropBox.size.height;
CGFloat scaleToApply = (xScale < yScale) ? xScale : yScale;
CGContextTranslateCTM(ctx, -cropBox.origin.x, layer.bounds.size.height- __TOP_BRANDING_BAR_HEIGHT +cropBox.origin.y);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextConcatCTM(ctx, CGAffineTransformMakeScale(scaleToApply, scaleToApply));
if (scaleToApply == yScale){
CGContextConcatCTM(ctx, CGAffineTransformMakeTranslation((layer.bounds.size.width-(cropBox.size.width*scaleToApply)-cropBox.origin.x)/(scaleToApply * 2.0), 0));
}
else{
if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)){
CGContextConcatCTM(ctx, CGAffineTransformMakeTranslation(0, (layer.bounds.size.height- __TOP_BRANDING_BAR_HEIGHT -(cropBox.size.height*scaleToApply))/(scaleToApply*2.0)));
}
else {
CGContextConcatCTM(ctx, CGAffineTransformMakeTranslation(0, (layer.bounds.size.height- __TOP_BRANDING_BAR_HEIGHT -(cropBox.size.height*scaleToApply))/(scaleToApply*2.0)));
}
}
CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh);
CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);
CGContextDrawPDFPage(ctx, otherPageRef);
CGContextRestoreGState(ctx);
может любой один догадаться, что это причина для моего сбой приложения и, пожалуйста, предложите мне обработать технику. Я даже попробовал метод выпуска и сохранения cgpdfdocumentRef, но не использовал. Ваше предложение более полезно для меня. Спасибо заранее.
+1 Спасибо за ваш удивительный намек, я тоже следую вашим советам и позвольте мне проверить, как он работает. – ajay
после следующих шагов моя память приборов колеблется до 25 МБ, это вызовет любую проблему. – ajay
У меня нет точных цифр и «это зависит», но я думаю, что безопасно использовать 30-50 МБ в вашем приложении. Кстати, вы можете обрабатывать предупреждения о памяти в своем коде (я сделал это в своем). Всякий раз, когда выдается предупреждение о сохранении ОС, просто закрывайте и снова открывайте PDF-файл. – Bobrovsky