[英]Questions about Memory Management in Swift
我剛剛開始學習內存管理,並且有一些問題。
我正在實施自定義相機
var captureSession = AVCaptureSession()
我是否需要對此添加一個弱引用( weak var captureSession = AVCaptureSession()
),或者一旦我移至另一個未使用上述資源的視圖控制器,它會自動釋放嗎? 我目前正在viewDidDisappear
停止captureSession
在以下任務中添加weak self
會獲得什么好處?
URLSession.shared.dataTask(with: url!) { [weak self](data, response, error) in { }
我通常將各種觀察者添加到textfield中,進行網絡檢查並在viewDidDisappear
中將其刪除。 它們是否已從內存中完全釋放,還是我必須在此之上做些額外的事情?
1. AVCaptureSession:
不要將您的captureSession
變量設置為弱,因為不能保證。 因為您的captureSession
會在不使用時隨時釋放。 另外,我建議您在viewWillDisappear
函數中停止您的captureSession
。
在此處了解有關弱,強等的更多信息:
2. weak self
阻礙:
當您的完成塊被其他一些對象保留時,應避免使用“強”引用周期。 因此,您應該對此類完成區塊使用weak self
。
請參閱此帖子以獲取更多信息。
3.觀察員:
如果您忘記對類進行removeObserver
,則即使您重新初始化該類,您的類也會保留該觀察者。
例如:如果您忘記在ViewController中刪除removeObserver
,則在重新啟動該控制器時,將再次添加您的觀察者。 這樣觀察者方法將被調用兩次,依此類推。
但是,如果使用的是ARC,那么刪除觀察者就足夠了,並且不需要釋放textField或其他對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.