Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从ViewDidDisplay()调用函数会导致内存泄漏,但从ViewWillLayoutSubViews()调用函数不会导致内存泄漏_Ios_Swift_Xcode - Fatal编程技术网

Ios 从ViewDidDisplay()调用函数会导致内存泄漏,但从ViewWillLayoutSubViews()调用函数不会导致内存泄漏

Ios 从ViewDidDisplay()调用函数会导致内存泄漏,但从ViewWillLayoutSubViews()调用函数不会导致内存泄漏,ios,swift,xcode,Ios,Swift,Xcode,我试图理解,如果从ViewDidDisplay而不是ViewWillLayoutSubviews调用同一个函数,为什么会导致内存泄漏 我有两个扩展,将视图的子层与其边界相匹配: extension CALayer { func fit(rect: CGRect) { frame = rect sublayers?.forEach { $0.fit(rect: rect) } } } extension UIView { func fitLayers

我试图理解,如果从ViewDidDisplay而不是ViewWillLayoutSubviews调用同一个函数,为什么会导致内存泄漏

我有两个扩展,将视图的子层与其边界相匹配:

extension CALayer {
    func fit(rect: CGRect) {
      frame = rect

      sublayers?.forEach { $0.fit(rect: rect) }
    }
}

extension UIView {
  func fitLayers() {
    layer.fit(rect: bounds)
  }
}
来自viewDidAppear的相同调用
priorityButton.fitLayers()
不会取消分配图层对象。两人都按预期完成了工作,工作也很好,但我想知道为什么会这样


谢谢

我想它与
UIViewController
生命周期有关,当您在
viewWillLayoutSubiews
中调用此函数时,因为视图将进行布局,所以没有问题,但当从
viewdidedisappease
调用时,所有
UIViewController
布局方法都会再次调用,因为您的函数是布局的东西<代码>UIViewController此处解释了生命周期: