Я пытаюсь отобразить страницу PDF с некоторыми аннотациями (по электронной почте), и большую часть времени это работает нормально.
Однако, с этим PDF , в частности, он, кажется, падает каждый раз при вызове CGContextDrawPDFPage для первой страницы. Я добавил
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);
как рекомендация от CGContextDrawPDFPage, занимающего большие объемы памяти , но это, похоже, не решило мою проблему.
Я пропустил это через профилировщик, чтобы посмотреть, что происходит, и он медленно начал выделять кучу памяти, пока, наконец, не достиг 512 МБ живых байтов и не умер.
Странно то, что когда я рендерил это в контекст изображения (для отображения на устройстве), он, кажется, работает нормально, но когда я рендерил его в контекст PDF (для отправки по электронной почте с аннотациями), он ломался. Все остальные PDF-файлы, которые я пробовал, отлично работают в обоих случаях.
Я надеялся, что кто-то, кто написал просмотрщик / аннотатор PDF, сможет проверить это и посмотреть, работает ли этот документ для них, и если да, дайте мне несколько советов о том, что они делают, чтобы уменьшить выделение памяти CGContextDrawPDFPage.
Еще один ресурс, на который я посмотрел, был этот замечательный ТАК вопрос.
Редактировать (подробнее о сбое):
В 90% случаев сбой фактически не отображается, отображается строка GDB, но приложение исчезает, а трассировка стека не отображается. (Он говорит, что приостановлен, но нет отображения потока). Однажды я увидел, что это был exc_bad_access, и он показал это в журнале:
malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug