Как справиться со сбоем, вызванным утечкой памяти при использовании PDFKit в iOS 12?

Я использую pdfKit на CollectionViewController и каждая ячейка имеет свой отдельный PDF для него, и PDF будет загружен из каталога документов.

Когда я использую следующий код под iOS 11, он работает нормально. Однако, когда я использую его на iOS 12, у меня возникает утечка памяти и последующий сбой.

Это ошибка, которую я получаю:

Поток 4: EXC_BAD_ACCESS (код =1, адрес =0x107b5401c)

Это мой код:

func loadData(_ finame: String) {
    let dbPath = finame
    let url = URL(fileURLWithPath: dbPath)
    if let pdfDocument = PDFDocument(url: url) {
        self.pdfView.document = pdfDocument
        self.pdfView.autoScales = true
        self.pdfView.maxScaleFactor = 4.0
        self.pdfView.minScaleFactor = pdfScaleFactor
        if #available(iOS 12.0, *) {
            self.pdfView.pageShadowsEnabled = false
        }
    }
}

Как я могу исправить эту проблему?

1 ответ

Попробуйте использовать [слабое я] в замыкании. Возможно, вы создаете сильный ссылочный цикл на себя и никогда не освобождаете его. И эта память продолжает расти, поскольку данные в формате PDF довольно большие.

func loadData(_ finame: String) {
    let dbPath = finame
    let url = URL(fileURLWithPath: dbPath)
    if let pdfDocument = PDFDocument(url: url) { [weak self] in,
        self?.pdfView.document = pdfDocument
        self?.pdfView.autoScales = true
        self?.pdfView.maxScaleFactor = 4.0
        self?.pdfView.minScaleFactor = pdfScaleFactor
        if #available(iOS 12.0, *) {
           self?.pdfView.pageShadowsEnabled = false
        }
    }
}
Другие вопросы по тегам