【问题标题】:How to solve Leaks?如何解决泄漏?
【发布时间】:2017-07-09 03:44:40
【问题描述】:

所以我的游戏中有内存泄漏。我认为它来自 Admob 和游戏中心的集成。有什么解决这个问题的建议吗?我尝试使用泄漏仪器定位问题,但我不知道该怎么做。还值得解决泄漏吗?我每隔一段时间就有大约 7 次泄漏。

//Ad banner

        self.banner = GADBannerView(adSize: kGADAdSizeSmartBannerPortrait)
        self.banner.adUnitID = "ca-app-pub-3940256099942544/6300978111"
        self.banner.rootViewController = self
        let request: GADRequest = GADRequest()
        self.banner.load(request)
        self.banner.frame = CGRect(x: 0,y: view.bounds.height - self.banner.frame.size.height, width: self.banner.frame.size.width, height: self.banner.frame.size.height)

        self.view.addSubview(self.banner!)


//gamecenter authentication 


    func authPlayer () {
            let player = GKLocalPlayer.localPlayer()
            player.authenticateHandler = {
                (view, error) in
                if view != nil {
                    self.present(view!, animated: true,completion: nil)

                }
            }
        }

【问题讨论】:

  • 你的日志信息是什么?
  • 我猜它是别的东西......哦等等......我只能猜测 :) 你应该发布来自仪器的图像和你认为相关的代码。
  • Fluidity 所说的从 deinits 开始...还有一个简单的方法来查看 Admob 是否是您的违规者,即删除所有相关的 Admob 代码并查看是否发生泄漏。
  • 或查看如何使用 Instruments 查找泄漏:developer.apple.com/library/content/documentation/…

标签: ios swift xcode sprite-kit


【解决方案1】:

deinit 添加到您的课程中,并附上一条打印消息,以确定哪些课程应该在它们应该消亡的时候没有消亡。然后,您转到这些类被实例化的地方,并将它们设为weakunowned 具有可选类型的变量。

如果这不能解决问题,那么您可能会遇到闭包问题,但我会担心只有在您了解 ARC 的基础知识之后才能学习闭包捕获泄漏。

这是一个很棒的教程,它展示了 ARC 的工作原理以及如何更详细地追踪泄漏:

https://www.raywenderlich.com/134411/arc-memory-management-swift

对于您的第二个问题,不,内存泄漏对您来说可能不是一个大问题。然而,它们也可能是一个巨大的问题。找出答案的方法是让您的应用一整天都处于打开状态,或者花半个小时浏览不同的级别,看看您的内存使用量是否持续上升。

如果您的内存使用量不断增加,那么您肯定遇到了需要解决的问题。否则,您的应用只是使用了比需要更多的资源,这并不理想,但也不一定是修复的关键。

【讨论】:

    猜你喜欢
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2018-04-11
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多