我正在尝试使用 IOS PDFKIT 将文本小部件添加到我的 pdf 中。所以为了实现这个目标,我正在使用这个PDFAnnottaion
类。
我的问题是,在添加多个注释(大约 15 个)后,我的应用程序面临一个很大的性能问题,因为如果我添加更多注释,内存使用会导致其崩溃。这是我的应用程序崩溃时的错误消息:
* 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];
}
}
}
那么有人知道我为什么会面临这种性能问题吗?我是否以错误的方式初始化我的注释?