xcode 内存图未显示保留周期
xcode memory graph not show retain cycle
我的 swift 代码如下。我在闭包中使用了 self,但是当我 运行 项目时,内存图不显示保留周期。我错了有一个保留周期?
class ViewController: UIViewController {
private var counter = 0
private var closure : (() -> ()) = { }
func foo() {
closure()
}
override func viewDidLoad() {
super.viewDidLoad()
closure = {
self.counter += 1
print(self.counter)
}
}
}
是的,Xcode并不总是直观地代表强引用循环。但它一致表明所讨论的对象尚未被释放。
例如,如果我通过导航控制器推送并弹出,我会在活动对象列表中看到 ViewController
,但是当我 select 它时,看不到任何循环,而是看到一些神秘的图表,包括导航控制器(即使我把它弹出):
话虽如此,我发现如果我以模态方式呈现并关闭有问题的视图控制器,我会更清楚地看到循环:
如果我们能看到原型循环(如下所示)就好了,但是在处理 UIKit 对象时,情况并不总是那么简单。
我的 swift 代码如下。我在闭包中使用了 self,但是当我 运行 项目时,内存图不显示保留周期。我错了有一个保留周期?
class ViewController: UIViewController {
private var counter = 0
private var closure : (() -> ()) = { }
func foo() {
closure()
}
override func viewDidLoad() {
super.viewDidLoad()
closure = {
self.counter += 1
print(self.counter)
}
}
}
是的,Xcode并不总是直观地代表强引用循环。但它一致表明所讨论的对象尚未被释放。
例如,如果我通过导航控制器推送并弹出,我会在活动对象列表中看到 ViewController
,但是当我 select 它时,看不到任何循环,而是看到一些神秘的图表,包括导航控制器(即使我把它弹出):
话虽如此,我发现如果我以模态方式呈现并关闭有问题的视图控制器,我会更清楚地看到循环:
如果我们能看到原型循环(如下所示)就好了,但是在处理 UIKit 对象时,情况并不总是那么简单。