PDFAnnotation IOS PDFKIT 的性能问题

问题描述

我正在尝试使用 IOS PDFKIT 向我的 pdf 添加文本小部件。 所以为了实现这个目标,我使用了 PDFAnnottaion 类。

我的问题是,在添加多个注释(大约 15 个)之后,我的应用程序面临着一个很大的性能问题,因为如果我添加更多注释,则会导致其崩溃的 ram 使用。 这是我的应用程序崩溃时的错误消息:

* thread #1,queue = 'com.apple.main-thread',stop reason = EXC_BREAKPOINT (code=1,subcode=0x190f1b22c)
    frame #0: 0x0000000190f1b22c CoreFoundation`CFRelease.cold.1 + 16
CoreFoundation`CFRelease.cold.1:
->  0x190f1b22c <+16>: brk    #0x1
CoreFoundation`__CFStringCollectionCopy.cold.1:
    0x190f1b230 <+0>:  adrp   x8,347691
    0x190f1b234 <+4>:  adrp   x9,482
    0x190f1b238 <+8>:  add    x9,x9,#0xab2            ; =0xab2
Target 0: (Runner) stopped.

错误消息让我认为错误与内存有关,但我不确定。

您可以在下面找到我用来创建和添加注释的代码:

    CGSize newSize = CGSizeMake(_pointer.size.width * pointerScale,_pointer.size.height * pointerScale);
    
    CGRect parentRect = _pdfView.bounds;;
    
    double x = parentRect.size.width / [observation.xScale doubleValue] ;
    double y = parentRect.size.height / [observation.yScale doubleValue];

    PDFAnnotation * observationText =  [[PDFAnnotation alloc] initWithBounds:CGRectMake(x + newSize.width /2,y + newSize.height /2,10,10) forType: PDFAnnotationSubtypeText withProperties: nil];;
    
     observationText.contents = [NSString stringWithFormat:@"%@",observation.observationId];
     observationText.fontColor = UIColor.blackColor;
     observationText.color = UIColor.clearColor;
    
     if(_pdPage != nil){
         [_pdPage addAnnotation:observationText];
         observation.textAnnotation = observationText;
     }

这就是我加载 pdf 的方式:


 if ([filePath isKindOfClass:[NSString class]]) {
            NSURL * sourcePDFUrl = [NSURL fileURLWithPath:filePath];
            PDFDocument * document = [[PDFDocument alloc] initWithURL: sourcePDFUrl];

            if (document == nil) {
              NSLog(@"cannot create document: File not in PDF format or corrupted.");
            } else {
                _pdfView.autoresizesSubviews = YES;
                _pdfView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
                _pdfView.backgroundColor = [UIColor colorWithWhite:0.95 alpha:1.0];
                _pdfView.displayDirection = kPDFDisplayDirectionVertical;
                _pdfView.displayMode = kPDFDisplaySinglePage;
                _pdfView.document = document;
                
                PDFPage* page = [document pageAtIndex:0];
                _pdPage = page;
                UITapGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action: @selector(onTap:)];
                UILongPressGestureRecognizer * longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action: @selector(longPress:)];

                tapGesture.numberOfTapsRequired = 1;
                tapGesture.numberOfTouchesRequired = 1;
                
                [_pdfView addGestureRecognizer:tapGesture];
                [_pdfView addGestureRecognizer:longPressGesture];

                movedObservation = nil;
                [_pdfView goToPage: page];

                CGRect pageRect = [page boundsForBox:[_pdfView displayBox]];
                CGRect parentRect = [[UIScreen mainScreen] bounds];

                if (frame.size.width > 0 && frame.size.height > 0) {
                    parentRect = frame;
                }

                CGFloat scale = 1.0f;
                if (parentRect.size.width / parentRect.size.height >= pageRect.size.width / pageRect.size.height) {
                    scale = parentRect.size.height / pageRect.size.height;
                } else {
                    scale = parentRect.size.width / pageRect.size.width;
                }

                NSLog(@"scale %f",scale);

                _pdfView.scaleFactor = scale;
                _pdfView.minScaleFactor = scale;
                _pdfView.maxScaleFactor = 4.0;
                for(Observation * observation in _observations) {
                    [self drawObservation:observation];
                }
            }
        }

那么有人知道为什么我会面临这种性能问题吗?我是否以错误的方式初始化我的注释?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...