gpt4 book ai didi

iOS 在 UIGraphicsBeginPDFPageWithInfo 内崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:48 27 4
gpt4 key购买 nike

上下文:Xcode 5、iOS 7.1。

我有一些生成 PDF 的代码,可以选择在其中嵌入现有 PDF,使用 PSPDFKit 呈现现有 PDF 的页面。 99% 的时间,代码工作正常;但是在可重现的 1% 的时间内,我遇到了崩溃 (exc_bad_access)。我无法解释当我重现崩溃时有什么不同 - 通常我需要让应用程序生成 PDF N 次(今天 N=5,其他日子 N=2)然后崩溃发生。

代码只是在一个循环中进行这两个调用:

CGSize pageSize = CGSizeMake(612*3, 792*3);
{
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, size.width, size.height), nil);

NSError *error = nil;

[pdfDoc renderPage:innerPageNum
inContext:UIGraphicsGetCurrentContext();
withSize:size
clippedToRect:CGRectZero
withAnnotations:nil
options:nil
error:&error];
}

有时它会在 UIGraphicsBeginPDFPageWithInfo 中崩溃,总是在汇编代码的下方。有没有人见过这样的事情或有任何调试线索?无法访问 UIKit 源代码,我一无所知。

CoreGraphics`CGPDFSecurityHandlerIsUnlocked:

0x41559ff:  pushl  %ebp
0x4155a00: movl %esp, %ebp
0x4155a02: xorb %al, %al
0x4155a04: movl 0x8(%ebp), %ecx
0x4155a07: testl %ecx, %ecx
0x4155a09: je 0x4155a12 ; CGPDFSecurityHandlerIsUnlocked + 19
0x4155a0b: cmpb $0x0, 0x7c(%ecx) <<< Thread 1: EXC_BAD_ACCESS (code=2, address=0xde)
0x4155a0f: setne %al
0x4155a12: movzbl %al, %eax
0x4155a15: popl %ebp
0x4155a16: ret

其中,如果我可以附上一张图片来显示堆栈跟踪,我相信会表明该函数最终达到了此调用深度的 21 个隐藏堆栈级别:

UIKit`UIGraphicsBeginPDFPageWithInfo:

0x431914f:  pushl  %ebp
0x4319150: movl %esp, %ebp
0x4319152: pushl %ebx
0x4319153: pushl %edi
0x4319154: pushl %esi
0x4319155: subl $0x5c, %esp
0x4319158: calll 0x431915d ; UIGraphicsBeginPDFPageWithInfo + 14
0x431915d: popl %esi
0x431915e: movl $0x2, %ecx
0x4319163: calll 0x4318cb7 ; GetCurrentContext
0x4319168: movl %eax, %edi
0x431916a: movl $0x2, %ecx
0x431916f: calll 0x4318ce1 ; GetCurrentContextAuxInfo
0x4319174: testl %edi, %edi
0x4319176: je 0x43192cb ; UIGraphicsBeginPDFPageWithInfo + 380
0x431917c: testl %eax, %eax
0x431917e: je 0x43192cb ; UIGraphicsBeginPDFPageWithInfo + 380
0x4319184: movl $0x2, %ecx
0x4319189: calll 0x4318ce1 ; GetCurrentContextAuxInfo
0x431918e: testl %eax, %eax
0x4319190: je 0x43192bd ; UIGraphicsBeginPDFPageWithInfo + 366
0x4319196: cmpb $0x0, 0x20(%eax)
0x431919a: movl %eax, %ebx
0x431919c: je 0x43191a6 ; UIGraphicsBeginPDFPageWithInfo + 87
0x431919e: movl %edi, (%esp)
0x43191a1: calll 0x4aaa848 ; symbol stub for: CGPDFContextEndPage
0x43191a6: leal 0x8(%ebp), %eax <<< Thread 1: EXC_BAD_ACCESS (code=2, address=0xde)

最佳答案

我不确定这是否完全相同,但我在这里回答了一个听起来类似的问题:UIGraphicsBeginPDFPage() randomly crashes on 64bit devices (CGPDFSecurityManagerCreateDecryptor ())

解决方案的要点是延迟为目标 PDF 中使用的任何 PDF 调用 CGPDFDocumentRelease,直到使用 UIGraphicsEndPDFContext 关闭目标 PDF 之后。对我来说,这意味着不幸的是直到过程结束才释放一些内存,即使我应该能够,但它似乎确实有效。

关于iOS 在 UIGraphicsBeginPDFPageWithInfo 内崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25129757/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com