Я использую программу для чтения PDF. Способ, которым я пишу код, достаточен для многих. Внезапно один PDF-файл появился на снимке с 300 МБ (всего 1000 страниц). PDF работает нормально, до 70 страниц позже он убивает моегоприложение, которое я проверяю в divice (IPad1, V5.0) и симуляторе (V 5.0). В симуляторе я могу перемещаться по всем страницам, начиная с 1 до последней страницы, но приходя на устройство, я не могу этого сделать. Я видел распределение памятив "Инструменте инструментов"
На прямоугольнике изображения, показывающем распределение памяти и изменение использования памяти, для каждой новой страницы, отображаемой заново (впервые после открытия приложения) Метод CGContextDrawPDFPage, увеличивающий 2 МБ памяти. Я не знаю, почему CGContextDrawPDFPage резко увеличивается. Я видел много блогов по этому вопросу, но это бесполезно и трата времени. Ниже приведен мой пример кода
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);
можно догадатьсячто является причиной сбоя моего приложения и, пожалуйста, предложите мне использовать технику. Я даже попробовал мойgpdfdocumentRef метод освобождения и сохранения, но бесполезный. Ваше предложение более полезно для меня. Заранее спасибо.