簡體   English   中英

關於Swift中的內存管理的問題

[英]Questions about Memory Management in Swift

我剛剛開始學習內存管理,並且有一些問題。

我正在實施自定義相機

var captureSession = AVCaptureSession()
  1. 我是否需要對此添加一個弱引用( weak var captureSession = AVCaptureSession() ),或者一旦我移至另一個未使用上述資源的視圖控制器,它會自動釋放嗎? 我目前正在viewDidDisappear停止captureSession

  2. 在以下任務中添加weak self會獲得什么好處?

     URLSession.shared.dataTask(with: url!) { [weak self](data, response, error) in { } 
  3. 我通常將各種觀察者添加到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM