Общая iOS проблема утечки памяти из-за пользовательских сегментов. Как исправить? - PullRequest
0 голосов
/ 22 апреля 2020

Я видел варианты следующего кода по всему StackOverflow:

import UIKit

class segueFromLeft: UIStoryboardSegue {
    override func perform() {
        // Assign the source and destination views to local variables.
        let src = self.source.view as UIView!
        let dst = self.destination.view as UIView!

        // Get the screen width and height.
        let screenWidth = UIScreen.main.bounds.size.width
        let screenHeight = UIScreen.main.bounds.size.height

        // Specify the initial position of the destination view.
        dst?.frame = CGRect(x: screenWidth, y: 0, width: screenWidth,
height: screenHeight)

        // Access the app's key window and insert the destination view
above the current (source) one.
        let window = UIApplication.shared.keyWindow
        window?.insertSubview(dst!, aboveSubview: src!)

        // Animate the transition.
        UIView.animate(withDuration: 0.5, animations: { () -> Void in
            src?.frame = (src?.frame.offsetBy(dx: -screenWidth, dy: 0))!
            dst?.frame = (dst?.frame.offsetBy(dx: -screenWidth, dy: 0))!

        }) { (Finished) -> Void in

            self.source.present(self.destination, animated: false, completion: nil) {

            }

        }

    }
}

Сначала код работает как хороший способ перехода от одного представления к другому. Но при постоянном использовании большинство проблем, которые были перечислены на этом сайте в результате этого, относятся к памяти. Каждый раз, когда используется переход, вид назначения инициализируется, а исходный вид остается в памяти. При продолжающемся использовании использование памяти продолжает расти и расти.

Простое отклонение исходного представления для меня не сработало, экран просто потемнел.

Мой вопрос, как мы можем решить эту проблему?

...