- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 Xcode 7 在 Swift 2.1 中开发纸牌游戏,我的应用程序在模拟器中运行良好,但在我的设备上测试时崩溃。
使用断点,我已将崩溃精确定位到 NSTimer.scheduledTimerWithTimeInterval
方法,该方法在动画发生后运行(然后触发另一个动画)。
我想这可能是我的图像大小问题,因为有些图像非常大 (>4 MB),所以我压缩了动画中的所有图像,现在它们总共占用不到 1 MB。
我还运行了 Zombie 和 Leak 工具,但一无所获,所以我有点困惑。这是它崩溃的代码。
func animateOnDeal() {
self.playerAnimatedCard.hidden = false
self.dealerAnimatedCard.hidden = true
cardOneToDeal()
}
func cardOneToDeal() {
UIView.animateWithDuration(0.5, animations: {
self.playerAnimatedCard.center.x -= self.view.bounds.width
}, completion: {finished in self.flipCardOne()})
}
func flipCardOne() {
self.playerAnimatedCard.playFlipAnimation()
NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: "cardTwoToDeal", userInfo: nil, repeats: false)
}
下面是实际运行动画的代码(在 UIImageView 子类中):
func playFlipAnimation() {
self.image = UIImage(named: "cardback2.png")
self.animationImages = nil
var imgArray = [UIImage]()
for var x = 1; x <= 12; x++ {
let img = UIImage(named: "img\(x).png")
imgArray.append(img!)
}
self.animationImages = imgArray
self.animationDuration = 0.3
self.animationRepeatCount = 1
self.startAnimating()
作为旁注,调试器简单地声明:“来自调试器的消息:由于内存问题而终止。”
如有任何帮助,我们将不胜感激,如果您需要更多信息,请告诉我。谢谢!
编辑:
因此,为了对其进行更多测试,我将 func playFlipAnimation 更改为迭代并添加 5 张图像,而不是原来的 12 张。这似乎解决了崩溃问题,但我仍然不确定为什么要添加更多图像首先使应用程序崩溃。
最佳答案
几点:
正如 Derek Lee 已经指出的那样,图像可能会占用大量内存。根据我的经验,运行时还会将图像在使用后在后台缓存一段时间。这可能与您的情况有关,因为查看您的代码,每次调用动画时您都会加载一组新的十二张图像。如果您多次迭代该动画,那么这将很快增加大量内存,尤其是对于 1MB 的图像文件。在这种情况下,虽然短期内看起来效率不高,但您可能需要考虑在初始化类时初始化一组图像,您可以重复使用这些图像。
在遍历您知道会占用大量内存的循环时,您可以做的一件事是将它放在自动释放池中。请参阅开发人员引用:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html我知道从技术上讲,ARC 应该是您在现代 iOS 世界中所需要的一切,但当我在我的一个应用程序中构建一个数据密集型过程时,它对我有用。
您不太可能触发在模拟器中运行的内存警告,因为没有考虑到底层硬件比目标设备拥有更多的可用容量这一事实。以我无限的智慧,我曾经让一些东西继续运行,最终使用了 50GB 的内存,但并没有在模拟器上触发任何类型的警告!
顺便说一句,我认为您应该能够将卡片图像压缩到远小于 1 MB。当然,这将取决于您要使用哪种图像(它们是照片吗?),但如果它是一个简单的 .png,那么对我来说这似乎很大。
希望对您有所帮助。
关于ios - Xcode 7/swift 2.1 "Message from debugger: Terminated due to memory issue",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33967646/
我不知道我做了什么来破坏我的 QtCreator,但是“突然”我所有的编译器问题(警告/错误)不再显示在问题面板中,而是只显示在“编译输出”面板中(我在那里不能使用它们通过单击跳转到错误代码)。 在“
我正在制作游戏作为自学。 我的目标是在鼠标指针后面有一条轨迹。(这有效)但是,当我在 chrome 上打开并运行它时。在达到一定的高度和宽度后,轨迹保留在 Canvas 上而不是被擦掉。谁能帮我解决这
我希望通过在我的HTML文件中适当地格式化我的网站上的文本来增强它的外观。具体地说,我希望确保我的HTML文件中的代码在网站上显示得很好。此外,我正在寻求帮助实现我的网站导航栏。,我希望和其他内容显示
我希望通过在我的HTML文件中适当地格式化我的网站上的文本来增强它的外观。具体地说,我希望确保我的HTML文件中的代码在网站上显示得很好。此外,我正在寻求帮助实现我的网站导航栏。,我希望和其他内容显示
我希望通过在我的HTML文件中适当地格式化我的网站上的文本来增强它的外观。具体地说,我希望确保我的HTML文件中的代码在网站上显示得很好。此外,我正在寻求帮助实现我的网站导航栏。,我希望和其他内容显示
我一直在尝试将背景图像添加到 html 文档中元素的边框: 你可以在这里看到:HTML: Something CSS: a { border-width:10px; border-co
我即将开始一个连接两个程序的项目,一个用c#,一个用c++。我已经有一个可以工作的 c# 程序,它能够与自身的其他版本对话。在开始使用c++版本之前,我想到了一些问题: 1) 我正在使用 protob
我正在尝试线程优先级的影响,当 run 方法中的 println 保留在注释中时,两个线程同时结束,我不理解这种行为,你能解释一下吗?谢谢。 主类 public class Main { public
jQuery 1.4: $('#menu li:last:not(.ignore)').addClass('last'); HTML: item 1 ite
当我创建或查看问题时,我想从Mantis问题跟踪系统中删除选择配置文件及其所有随附字段,因为这些问题与我要创建的任何问题都不相关。 其中包括配置文件部分随附的“平台”,“操作系统”和“操作系统版本”字
我不在Master分支上工作。我正在开发另一种newFeature,该功能也发布在github上。 我知道在处理Master分支时如何解决问题:Closes #XXX。 但是,这仅在我在Master分
我需要在一些UICollectionViewCell中画一个圆圈。具有不同颜色边框和背景颜色的圆圈。我的代码。 UICollectionViewController - (UICollectionVi
我们将Trac用于我正在从事的开源项目。我想将所有公开票导出到Github的Issues。我已经找到了一些可能的小型脚本,但是我想知道是否有人这样做并提出了建议。 理想情况下,它将trac的描述语法转
我对 iOS 编程还比较陌生,但在其他语言(主要是 C# 和 Java)方面拥有丰富的编程经验。 我正在尝试为 iPad 设备的某些产品制作一个类似图片库的东西,其中包含指定的类别。用户界面非常简单,
我已经在中间人中激活了 I18n,如下所示: activate :i18n, mount_at_root: :de 现在我想自动从 / 重定向到 /de。这可能吗? 另外,我想知道为什么中间人使用 p
我已经成功编写了一个程序,可以从 Excel 文件中读取数据并将它们存储在 mysql 的表中。我的程序读取每个文件的第一行,创建表的字段,并将其余数据存储为每列中的值。正是因为这种情况以编程方式发生
这是我的代码。 function m1() { return new Promise(function(resolve, reject) { var files = $('#aws-upl
谁能告诉我这是怎么回事? #include #include #include #include #include class writeManager { std::vector
compile 'com.github.RogaLabs:social-login:1.2.1' compile 'com.github.mukeshsolanki:social-login-help
我有一个巨大的 csv 文件,其中包含 149 列 和 25K+ 行,可以在 MySQL 中上传该文件> 我正在使用MySQL LOAD DATA 查询 表我的查询是: LOAD DATA local
我是一名优秀的程序员,十分优秀!