【问题标题】:Questions about Memory Management in Swift关于 Swift 内存管理的问题
【发布时间】:2018-12-03 10:59:28
【问题描述】:
我刚开始学习内存管理,我有一些问题。
我正在实现一个自定义相机
var captureSession = AVCaptureSession()
我是否需要对此进行弱引用 (weak var captureSession = AVCaptureSession()),或者一旦我移动到另一个不使用上述资源的视图控制器,它是否会自动解除分配?
我目前正在停止 viewDidDisappear
中的 captureSession
-
在以下任务中添加weak self 将获得什么好处?
URLSession.shared.dataTask(with: url!) { [weak self](data, response, error) in {
}
我通常会在文本字段中添加各种观察者,网络检查
并在viewDidDisappear 中删除它们。它们是从内存中完全释放,还是我必须在此之上做一些额外的事情?
【问题讨论】:
标签:
ios
swift
automatic-ref-counting
【解决方案1】:
1. AVCaptureSession:
不要为您的captureSession 变量设置弱,因为没有保证。因为您的captureSession 将在不使用时随时释放。另外我建议你在viewWillDisappear 函数中停止你的captureSession。
了解更多关于弱、强等here:
2。 weak self 在块中:
当你的完成块被其他一些对象持有时,你应该避免强引用循环。因此,您应该使用 weak self 来完成此类完成块。
更多信息请参考post。
3.观察者:
如果您忘记对您的班级执行removeObserver,即使您重新启动同一个班级,您的班级也会持有该观察者。
例如:
如果您忘记在 ViewController 中删除 removeObserver,当重新初始化同一个控制器时,您的观察者将被再次添加。这样观察者方法将被调用两次,依此类推。
但删除观察者就足够了,如果您使用的是 ARC,则无需释放您的 textField 或其他对象。