首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图在for循环Swift中减少内存影响(4)

试图在for循环Swift中减少内存影响(4)
EN

Stack Overflow用户
提问于 2017-12-07 12:24:06
回答 1查看 556关注 0票数 0

我有一个pdf文件(约200页)。我运行一个for循环,依次迭代所有页面,并将其刮除一些字符串并存储在Array中。

然而,这会导致崩溃。

调试器的消息:由于内存问题而终止。

我试图通过从数组中删除元素来减少内存的大小,但是尽管数组被缩短了,数据大小仍然保持不变,这是怎么回事?

代码语言:javascript
复制
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循环中释放内存。

EN

回答 1

Stack Overflow用户

发布于 2017-12-07 12:33:10

当您使用MemoryLayout.size时,您将得到该类型内存的大小。但是一个固定大小的结构,所以你可以看到那个单元格的大小。

您应该在单元格的计数中重复:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47695113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档