多层视图不会释放记忆

时间:2018-02-16 11:45:03

标签: ios swift performance memory calayer

我创建了自定义视图:

final class Clock: UIView {

lazy var hourArrow: CALayer = {
    let layer = CALayer()
    layer.contents = #imageLiteral(resourceName: "hourArrow").cgImage
    layer.contentsGravity = kCAGravityResizeAspect
    return layer
}()

lazy var subLayers = [hourArrow,minuteArrow,centerDial,clockDial,clockArrow,block]


override init(frame: CGRect) {
    super.init(frame: frame)
    subLayers.forEach { (l) in
        layer.addSublayer(l)
    }
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

override func layoutSubviews() {
    subLayers.forEach({ l in
        let rect = CGRect(x: 0, y: 0, width: frame.width, height: frame.height)
        l.frame = rect
    })
}

}

我用它ViewController:

class ClockViewController: UIViewController {

lazy var clock: Clock = {
    let clock = Clock(frame: .zero)
    clock.translatesAutoresizingMaskIntoConstraints = false
    return clock
}()

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(clock)
    let safeArea = view.safeAreaLayoutGuide
    clock.topAnchor.constraint(equalTo: safeArea.topAnchor, constant: 40).isActive = true
    clock.leadingAnchor.constraint(equalTo: safeArea.leadingAnchor, constant: 40).isActive = true
    clock.trailingAnchor.constraint(equalTo: safeArea.trailingAnchor, constant: -40).isActive = true
    clock.heightAnchor.constraint(equalToConstant: 100).isActive = true
    // Do any additional setup after loading the view.
}

}

然后我移动到这个视图控制器,这个层的内存高达10 MB。 当我解雇VC时,内存不会释放但是deinit被调用了。

(我必须删除CALayer变量才能发布,所有图层都像第一个一样创建)

任何想法?

0 个答案:

没有答案