2016-06-09 16 views
7

Chúng tôi tạo ra một DisposeBag, và một Observable, đăng ký các Observable và sau đó addDisposableTo(disposeBag), tôi biết khi nào DisposeBag sẽ deinit, nó sẽ gọi dispose() để giải phóng nguồn lực nếu không nó sẽ dẫn rò rỉ bộ nhớ.Khi nào chúng ta nên gọi addDisposableTo (disposeBag) trong RxSwift?

Nếu số Observable gửi Complete hoặc Error kết thúc trong thời gian hữu hạn. Khi số Observable chấm dứt trước DisposeBag deinit, tôi có cần gọi số addDisposableTo(disposeBag) không? DisposeBag có tự động giải phóng người quan sát đã đăng ký nó khi nhận được tin nhắn bị chấm dứt không?

let disposeBag = DisposeBag() 

Observable.just("") 
    .subscribe { event in 
     print(event) 
    } 
    .addDisposableTo(disposeBag) 

Tôi có cần phải .addDisposableTo(disposeBag) một cách rõ ràng không? Tôi nghĩ sau khi gửi "", Observable sẽ chấm dứt và phát hành người quan sát?

Trả lời

7

Nếu bạn chắc chắn rằng Hoàn thành quan sát được một cách xác định - như sử dụng just trong ví dụ của bạn, hoặc sử dụng take, takeUntil, vv -, bạn có thể chọn không sử dụng DisposeBag.

Bạn có thể nhận được cảnh báo trình biên dịch, điều đó thực sự giải thích hành vi này tốt và cách làm việc xung quanh nó. Nhưng nói chung, nó là tương lai hơn bằng chứng nếu bạn sử dụng DisposeBag anyway.

Xem: Unused disposable warning

0

Túi bỏ túi được sử dụng để trả lại hành vi giống như ARC cho RX. Khi một DisposeBag được deallocated, nó sẽ gọi vứt bỏ trên mỗi của các disposables thêm.

Nó được sử dụng để vứt bỏ các tài liệu tham khảo cũ mà bạn không cần sử dụng nữa (ví dụ như kết nối HTTP mở, kết nối cơ sở dữ liệu hoặc bộ đệm ẩn).

Vì vậy, nếu chúng tôi có bất kỳ tài nguyên nào có thể được để lại, bạn nên gọi nó.

Tìm hiểu thêm trong this article.

Các vấn đề liên quan