Pergunta

Eu estou tentando compor uma página PDF com algumas anotações sobre o mesmo (e-mail), e na maioria das vezes isso funciona bem.

No entanto, com este PDF em particular, parece que falha sempre na chamada para CGContextDrawPDFPage para a primeira página.Eu adicionei

CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);

como uma recomendação de CGContextDrawPDFPage tomando grandes quantidades de memória mas que não parecem resolver o meu problema.

Eu corri isso através do profiler para ver o que estava acontecendo, e ele lentamente começou a atribuição de um monte de memória, até que finalmente ele atingiu 512MB de viver bytes e morreu.memory allocation profiled in instrument

O estranho é que quando eu processamento de uma imagem (para visualização no dispositivo) contexto parece funcionar bem, mas quando eu processá-lo para um PDF contexto (por e-mail com anotações), ele quebra.Todos os outros PDFs eu tentei trabalhar bem, em ambos os casos.

Eu estava esperando que alguém que está escrito um visualizador de PDF/anotador poderia testar isso e ver se este documento funciona para eles, e se assim for, me dê algumas dicas sobre o que eles estão fazendo para reduzir as alocações de memória de CGContextDrawPDFPage.

Outro recurso que eu olhei foi esse grande ENTÃO, Pergunta.

Editar (para mais informações sobre a falha):

90% do tempo do acidente, na verdade, não comparecer, a gdb linha apresenta, mas o aplicativo vai embora e o rastreamento de pilha não mostrar.(Ele diz pausa, mas não há exibição de tópicos).Uma vez eu vi que era um exc_bad_access e ele mostrou isso no log:

malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Foi útil?

Solução

Você está construindo o PDF no thread principal?Se assim for, você não pode receber o aviso de memória, porque você já bloqueou o sinal enquanto estiver em execução, uma vez que a execução do loop nunca tem uma chance para a mensagem de envio para você.

Outras dicas

Remover a exceção de ponto de interrupção no xcode e ele funciona muito bem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top