Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Swift] 강한 참조, 약한 참조, 미소유 참조 #58

Closed
seungchan2 opened this issue May 20, 2022 · 0 comments
Closed

[Swift] 강한 참조, 약한 참조, 미소유 참조 #58

seungchan2 opened this issue May 20, 2022 · 0 comments
Assignees
Labels

Comments

@seungchan2
Copy link
Owner

seungchan2 commented May 20, 2022

강한 참조는 default로 설정되어 있음

약한 참조와 미소유 참조는 RC의 숫자가 올라가지 않게 함

약한 참조

weak 키워드 사용

weak는 nil이 자동으로 할당이 됨

미소유 참조

unowned 키워드 사용

unowned는 Swift 버전 5이후, 옵셔널로 선언하는 것이 가능해졌지만 nil이 자동으로 할당되지 않음

따라서 실제 인스턴스가 해제 되었다면 에러가 발생

    input.didAfterAddButtonTapped
            .emit(onNext: { [weak self] in
                guard let self = self else { return }
                self.isAfterButtonHidden.accept(!self.isAfterButtonHidden.value)
            })
            .disposed(by: disposeBag)

[weak self] 를 통해 순환 참조를 방지하였음

weak self를 사용하면 자동으로 nil이 할당되므로

guard let self = self else { return } 자동으로 nil값을 벗겨줌

스크린샷 2022-05-23 오후 10 13 57

[unowend self]의 사용을 지양하는 이유는 위의 그림을 살펴보면 됨

MyViewController Deinit -> DisposeBag Deinit -> Disposable Dispose -> Observable Deinit

순서로 실행이 되는데 MyViewController의 Deinit과 Observable의 Deinit사이에는 약간의 시간차이가 존재함

이 사이에 Observable에서 MyViewController를 참조하는 행위가 발생하게 되면

크러쉬가 발생할 가능성이 있기 때문에 unowned self를 지양한다고 함

++ 예시는 부가적인 것이므로 키워드의 내용만 숙지하면 됨 !

@seungchan2 seungchan2 self-assigned this May 20, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant