swift dismissViewControllerAnimated 发现没有执行deinit问题

一直发现 dismissViewControllerAnimated 没有执行deinit 本身是自动内存管理就没有太注意, 好像我的内存增加并不明显, 几天特意找了下 看看是为什么 , 百度了些资料也验证了下, 发现里面要是有代理引用 必须把代理制空 才能deinit 我也是醉了, 因为有时候我引用代理的实例是局部变量, 所以还得好好处理修改才好啊,
代码:

//
// TestDeinitViewController.swift
// boosjdance
//
// Created by boosj123 on 15/12/17.
// Copyright © 2015年 cz. All rights reserved.
//

import UIKit

class TestDeinitViewController: UIViewController ,PresentHeadViewDelegate{

var  backView:PresentHeadView!
override func viewDidLoad() {
    super.viewDidLoad()
    let backBtn_H = UIImageView(image: UIImage(named: "Navback.png")).bounds.height + 3 + interval_W
    let frame = CGRect(x: 0, y: 30, width: stageWidth, height: backBtn_H)
     backView = PresentHeadView(frame: frame, title: "登录注册")
    backView.delegate = self
    self.view.addSubview(backView)

    // Do any additional setup after loading the view.
}
deinit{
  Getdevice.println("测试deinit")
}
func headViewback(){
  backView.delegate = nil//加这句才执行deinit函数
  self.dismissViewControllerAnimated(true) { () -> Void in
    
    }
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

}

------------更新----------------------
和群友讨论发现这个麻烦是自己造成的 而不是苹果造成的 我实验了 苹果本身类的代理会自动释放, 所以我们写代理方法有问题, 定义代理的时候加一个weak 弱引用就可以了, 也会因此产生一个问题, 弱引用不能是代理需要是类 , 所以有两个方法搞定

方法一: protocol PresentHeadViewDelegate:class{ func headViewback() }
方法2:
@objc protocol PresentHeadViewDelegate{ func headViewback() }
定义的时候
`

weak var delegate:PresentHeadViewDelegate?
`
这样就没有那个需要手动置空的问题了

你可能感兴趣的:(swift dismissViewControllerAnimated 发现没有执行deinit问题)