- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经开始学习 Swift 和 iOS 编程,并且编写了一个小应用程序,由一个 navigationController、一个 FirstViewController 和一个 SecondViewController 组成。
FirstViewController 是 rootViewController。当应用程序首次启动时,它会落在这个 ViewController 上。在此 ViewController 中,我有几个用于相应 PDF 文档的按钮。每个按钮都执行以下操作。
点击按钮 ->
1)创建SecondViewController
2)创建PDFViewer
3) 加载相应的PDF文件
4)推送SecondViewController
当点击 navigationController 的“后退”按钮时,我尝试清理 PDFViewer、它的文档并关闭 SecondViewController。
但我注意到,在调试导航器内存选项卡中,每个周期(单击“帮助”按钮 -> 查看 PDF -> 单击“后退”按钮)应用程序的内存使用量大约会增加 1.2 到 2 Mb。
我尝试谨慎对待“保留周期”,但显然我错过了一些基本的东西。
这是完整的代码,
// FirstViewController.swift
class FirstViewController: UIViewController {
@IBOutlet weak var helpButton: UIBarButtonItem!
helpButton.addTarget(self, action: #selector(self.helpButtonAction(_:)), for: .touchUpInside)
@objc private func helpButtonAction(_ sender: UIButton?){
SecondViewController = helperDocViewerViewController()
SecondViewController.docFileName = sender.currentTitle
self.navigationController?.pushViewController(SecondViewController, animated: true)
}
}
// helperDocViewerViewController.swift
import UIKit
class helperDocViewerViewController UIViewController {
var innerView: helperDocViewerView!
public var docFileName:String!
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.white
self.innerView = helperDocViewerView(frame: self.view.bounds)
if docFileName != nil {
self.helperDocViewerView.setDocument(PDF: docFileName)
}
self.view.addSubview(self.innerView)
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
self.dismiss(animated: false, completion: nil)
self.innerView.removeFromSuperview()
self.innerView.cleanUp()
self.innerView = nil
}
}
// helperDocViewerView.swift
import PDFKit
class helperDocViewerView:UIView {
public var pdfViewer:PDFView!
override init(frame: CGRect) {
super.init(frame: frame)
self.initPage(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.initPage(frame: frame)
}
private func initPage(frame: CGRect){
pdfViewer = PDFView(frame: frame)
pdfViewer.autoScales = true
self.addSubview(pdfViewer)
}
public func setDocument(PDF:String) {
if let documentURL = Bundle.main.url(forResource: PDF, withExtension: "pdf"){
if let document = PDFDocument(url: documentURL) {
self.pdfViewer.document = document
self.pdfViewer.minScaleFactor = self.pdfViewer.scaleFactor
self.pdfViewer.layoutDocumentView()
self.pdfViewer.goToNextPage(nil) // autoScales Bug?
self.pdfViewer.goToFirstPage(nil)
}
}
}
public func cleanUp(){
self.pdfViewer.removeFromSuperview()
self.pdfViewer.document = nil
self.pdfViewer = nil
self.removeFromSuperview()
}
}
您认为是什么导致了内存泄漏?
P.S.:我在 High Sierra v10.13.2 iMac 上使用 Xcode v9.2、Swift v4 和 iOS Simulator v10.0
最佳答案
如果我是你,我会运行一些分析器来了解更多有关正在发生的事情,并在我的代码上运行静态分析器。
当您在屏幕上显示 PDF 文档时,一到两兆并不会占用大量内存。 PDF 是一种复杂的二进制格式。
查找内存泄漏:
如果您想了解更多有关 PDF 标准的信息。 http://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf
关于ios - 简单的 iOS NavigationController + PDFViewer 在每次初始化时都会泄漏 1.2 到 2 Mb 的内存。 (内存泄漏)( swift ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48449238/
我有一个本地存储库,有一个大文件被意外添加到其中。现在,即时通讯几乎落后了100次提交。当我尝试推送到GitHub时,它给了我一个错误。 我需要做任何我需要做的事情,以便能够推送此存储库的其余部分。
我正在尝试分配内存NSImage*originalLocationImage; NSURL *fileURL = [NSURL fileURLWithPath:originalLocation];//
我如何以及在何处可以编辑CDH4.7中的输入拆分大小,默认情况下为64 MB,但我想将其称为1MB,因为我的MR作业运行缓慢并且我想提高MR作业的速度。我想需要编辑cor-site属性IO.file.
我创建了一个 DLL,其中包含一个从 C# 代码调用的 JNI 函数。作为长时间运行的 GUI 应用程序的 C# 应用程序多次调用该函数。 我的 JNI 函数调用 JNI_GetCreatedJava
运行 TestDFSIO 后,我得到了以下指标: 2019-04-30 09:50:35,790 INFO fs.TestDFSIO: Date & time: Tue Apr
我正在测试连接到 Xcode 5.1.1 的运行 iOS 7.1 的 iPhone 4。我不明白为什么当仪器显示我的应用程序仅使用几兆字节并且有大量可用内存时我会收到内存警告甚至崩溃(见附件)。有什么
我有一个假设的值数据库,每个值的大小为 4 个字节(即 4,000,000,000)。所有值都存在于数据库中,因此它以 0 开头,以最大的 4 字节数字结尾。 只有一次,我想通过将 1 到 10000
我有一个字符串元组的 python 列表,格式如下:lst = [('xxx', 'yyy'), ...etc]。该列表包含大约 8154741 个元组。我使用了一个分析器,它说该列表占用大约 500
我需要每秒发送 1,00,000 批记录。我在实验后得到的是 azure event hub 的事件限制为 10,00,000 个字节。我的每条记录有 145 字节,我必须发送的总记录是 1,00,0
HDFS块大小默认为128 MB(来源:https://hadoop.apache.org/docs/r2.9.0/hadoop-project-dist/hadoop-hdfs/hdfs-defau
我需要每秒发送 1,00,000 批记录。我在实验后得到的是 azure event hub 的事件限制为 10,00,000 个字节。我的每条记录有 145 字节,我必须发送的总记录是 1,00,0
我正在 Linux 机器上运行 Jboss EAP 服务器 6.1。分配的堆内存如下。 JAVA_OPTS="-Xms2048m -Xmx2048m -XX:MaxPermSize=256m -Dja
我最近提出并解决了一个关于将大于 2 MB 的 .PDF 文件作为 BLOBS 上传到 MySQL 数据库的问题。我不得不更改我的 php.ini 文件中的一些设置和 MySQL 的最大数据包设置。然
我需要创建一个文本文件(字母数字),其大小(精确或接近)以 MB 为单位等于我输入的数字,例如 1 MB。我试图生成一个字符串,认为一个字符是 16 位或 2 字节,所以:1KB = 1024 字节
我已经阅读了很多有关通过设置 yarn.scheduler.maximum-allocation-mb 来解决此类问题的内容,我已将其设置为 2gb,因为我当前正在运行 select count(*)
这个问题在这里已经有了答案: this exceeds GitHub's file size limit [duplicate] (3 个回答) 1年前关闭。 核心程序崩溃数据。 我不知道核心文件是从
我已经建立了一个 Electron 应用程序,并使用 Electron 打包程序对其进行了打包。我制作了238MB的Windows bundle 包,而Linux版本是450 MB。我将其与也是 El
这个问题在这里已经有了答案: Generate an integer that is not among four billion given ones (38 个答案) 关闭 9 年前。 Give
我的 Meteor 应用程序获取一个 CSV 文件,使用 Baby Parse(Papa Parse for server)对其进行解析,并将数据插入到 MongoDB 集合中。 每个 CSV 行都作
Amazon SES 有 10 MB 的文件限制 我的问题是 有没有其他方法可以发送超过 10 MB 的文件? 最佳答案 这是一个硬限制。 您需要做的是包含您当前包含在电子邮件中的 Assets 的
我是一名优秀的程序员,十分优秀!