我有一个pdf文件(约200页)。我运行一个for循环,依次迭代所有页面,并将其刮除一些字符串并存储在Array中。
然而,这会导致崩溃。
调试器的消息:由于内存问题而终止。
我试图通过从数组中删除元素来减少内存的大小,但是尽管数组被缩短了,数据大小仍然保持不变,这是怎么回事?
let document = PDFDocument(url: documentURL)
document?.delegate = self
let numberOfPages = CGFloat((document?.pageCount)!)
var pageText : String?
for page in 0...Int(numberOfPages) {
if document?.page(at: page)?.string != nil {
pageText = document?.page(at: page)?.string
var parameters: [String]?
parameters = pageText?.components(separatedBy: "Train From")
pageText = nil //pageText now stored in parameters variable so set to nil
if parameters!.count > 1 && parameters!.count < 3 {
print(MemoryLayout.size(ofValue: parameters!), ">", parameters!.count)
parameters!.removeLast() // we only need first item
print(MemoryLayout.size(ofValue: parameters!), ">>", parameters!.count)
}
}
} 打印出来的是
8>2 8个>> 1
那么,数组正在移除一个元素,但它的大小仍然是8?怎么,为什么?
我需要在for循环中释放内存。
发布于 2017-12-07 12:33:10
当您使用MemoryLayout.size时,您将得到该类型内存的大小。但是一个固定大小的结构,所以你可以看到那个单元格的大小。
您应该在单元格的计数中重复:
print(MemoryLayout.size(ofValue: parameters!) * parameters!.count, ">", parameters!.count)
parameters!.removeLast() // we only need first item
print(MemoryLayout.size(ofValue: parameters!) * parameters!.count, ">>", parameters!.count)https://stackoverflow.com/questions/47695113
复制相似问题