我现在有一个非常简单的应用程序,有两个viewcontroller。我在它们之间有一个转换(当然有一个segue),两个屏幕都有很多图像和带有图像的按钮。
我发现当你在屏幕之间切换时会出现内存泄漏。我猜,每次您再次打开viewController时,图像都会以某种方式再次加载。每次大约添加6MB,我非常确定这些图像的总量小于1MB。所以也许还有什么东西在渴望所有的记忆?
我有6个图像视图,我在默认模式中使用交叉融合转换。我希望我可以在这里复制一些代码,但这是一个大项目,我不知道什么代码会有帮助。
所以我的问题是:是什么导致了这个问题(最好是我如何解决这个问题)?是图像,还是过渡段。
任何帮助都将不胜感激!谢谢!
---编辑:下面是一些图片的代码

    // variables of the bottom menu bar
    @IBOutlet weak var cameraButton: UIButton!
    @IBOutlet weak var redoButton: UIButton!
    @IBOutlet weak var saveButton: UIButton!
    @IBOutlet weak var shareButton: UIButton!
    @IBOutlet weak var overLay: UIImageView!



    // this function lets the statusbar disappear
    override func prefersStatusBarHidden() -> Bool {
        return true
    }



    override func viewDidLoad() {
        super.viewDidLoad()
        overLay.image = nil
          // variables for accessing web images
    let url = NSURL(string: "http://www.fteunen.com/app/overLay.png")
   let urlRequest = NSURLRequest(URL: url!)
        NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue.mainQueue(), completionHandler: {
            response, data, error in

            if error != nil {

              println("Something happened i guess, not good!!")
            } else {
               //let image = UIImage(data: data)
                self.overLay.image = UIImage(data: data)
            }

        })

    }

我也不知道在哪里能找到密码。我只是点击了一些选项。
----编辑:第二个viewController(包含所有图像的viewController)和dismissViewController:
    class ViewController2: UIViewController {

    // variables of the bottom menu bar
    @IBOutlet weak var cameraButton: UIButton!
    @IBOutlet weak var redoButton: UIButton!
    @IBOutlet weak var saveButton: UIButton!
    @IBOutlet weak var shareButton: UIButton!
    @IBOutlet weak var overLay: UIImageView!



    // this function lets the statusbar disappear
    override func prefersStatusBarHidden() -> Bool {
        return true
    }



    override func viewDidLoad() {
        super.viewDidLoad()
        overLay.image = nil
          // variables for accessing web images
    let url = NSURL(string: "http://www.fteunen.com/app/overLay.png")
   let urlRequest = NSURLRequest(URL: url!)
        NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue.mainQueue(), completionHandler: {
            response, data, error in

            if error != nil {

              println("Something happened i guess, not good!!")
            } else {
               //let image = UIImage(data: data)
                self.overLay.image = UIImage(data: data)
            }

        })

    }

    override func viewDidLayoutSubviews() {
 //code
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func didTakePhoto(sender: AnyObject) {
//code
        })

    }

    override func dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?) {
        dismissViewControllerAnimated(true) {
            // Optional completion handler code here
        }
    }
    @IBAction func redoPicture(sender: AnyObject) {
        // code
        })

    }

最佳答案

您正在泄漏内存,因为您正在不断创建新的视图控制器,这些控制器基本上都是相互叠加并下载图像的。您应该执行segue,然后关闭该视图控制器以返回到上一个视图控制器。在第二个视图控制器中,您试图通过以下任一方式返回到第一个控制器调用dismissViewControllerAnimated

dismissViewControllerAnimated(true, completion: nil)

或:
dismissViewControllerAnimated(true) {
    // Optional completion handler code here
}

关于ios - 在Swift中使用图片时发生内存泄漏?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29290651/

10-10 14:55
查看更多