Disposables

Youn·2021년 11월 4일
0

iOS-RxSwift

목록 보기
3/8
post-thumbnail

onDisposed


  • observable 이 전달하는 이벤트가 X
  • 리소스가 해제되는 시점에 자동으로 호출됨
  • 가능하다면 리소스 정리를 직접 해주는게 좋음
let sub1 = Observable.from([1,2,3])
	.subscribe(onNext: {elem in
		print("Next", elem)
	},onError: {
		error in print("Error", error)
	}, onCompleted: {
		print("Completed")
	}, onDisposed: {
		print("Disposed")
	})

리소스 해제


1. 직접 해제 하기

sub1.dispose()

2. DisposeBag 사용

var bag = DisposeBag()
Observable.from([1, 2, 3])
    .subscribe(
    	print($0)
    }.disposed(by: bag)
  • 1번 방법보다 더 권장됨
  • subscribe 가 return 하는 disposable 이 disposeBag 에 추가됨
  • disposeBag 이 해제되는 시점에 함께 해지됨

* 임의의 내가 원하는 시점에 해제하려면?

  1. swift bag = DisposeBag() 호출
    => 이전에 있던 disposeBag 이 해제됨
  2. dispose() 호출
/* 1씩 증가하는 정수를 1초마다 방출*/
let sub2 = Observable<Int>.interval(.seconds(1),
	scheduler: MainScheduler.instance)
	.subscribe(onNext: {elem in
		print("Next", elem)
	},onError: { error in
		print("Error", error)
	}, onCompleted: {
		print("Completed")
	}, onDisposed: {
		print("Disposed")
	})
/*3초 뒤에 dispose*/
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {sub2.dispose()}
  • next 다음에 completed 메소드가 실행되지 않음
  • 때문에 권장되지 않음
    => takeuntil 과 같은 연산자 사용
profile
youn

0개의 댓글