- This topic has 3개 답변, 3명 참여, and was last updated 4 years, 8 months 전에 by jxxnnee.
-
글쓴이글
-
-
드타장참가자
- 글작성 : 8
- 답글작성 : 2
class Thing { var disposable: Disposable? var total: Int = 0 deinit { disposable?.dispose() } init(producer: SignalProducer<Int, NoError>) { disposable = producer.startWithNext { number in self.total += number print(self.total) } } }
위의 코드에서 closure는 self가 해제 될 때까지 기다리고 self는 closure가 해제될 때까지 기다리는 strong reference cycle 상황을 만든다고 하는데, 이 부분이 잘 이해가 되지 않습니다. ㅜㅜ
또한disposable = producer.startWithNext { [weak self] number in self?.total += number print(self?.total) }
위와 같이 수정하듯 closure 내부에서 self를 사용하게 되는 모든 경우에서 [weak self] 를 사용하면 되는건지도 궁금합니다 !
2020-03-11 오후 10:33 #2713 -
드타장참가자
- 글작성 : 8
- 답글작성 : 2
https://greenchobo.tistory.com/3
이 글을 참고했습니다 !2020-03-11 오후 10:35 #2715 -
야곰키 마스터
- 글작성 : 37
- 답글작성 : 579
우선 위 내용을 이해하려면 스위프트의 ARC라는 개념과 클로저의 Capture라는 개념을 이해해야합니다.
예제 코드의 클로저는 클로저가 생성되는 시점의 인스턴스 상태를 유지하기 위해 클로저 내부의 인스턴스를 모두 획득(capture) 해둡니다.
그러기 위해서self
즉, 클로저는 프로퍼티로 갖게되는Thing
클래스의 인스턴스가 클로저에 의해 획득되어 reference count가 1 증가합니다.
또, 해당 클로저가 disposable이라는 인스턴스 프로퍼티에 할당되므로 클로저의 reference count도 1 증가합니다. 서로 reference count를 올려주기 때문에 순환참조 문제가 발생합니다.
이에 대해 더 알아보고 싶다면 스위프트 언어 가이드 문서 중 ARC 문서(https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html)를 참고하면 훨씬 도움이 됩니다.
영어가 너무 어렵다면 ARC 및 클로저 값 획득 등의 내용으로 검색해보면 많은 내용 찾아볼 수 있습니다.2020-03-12 오후 1:39 #2726 -
jxxnnee참가자
- 글작성 : 6
- 답글작성 : 4
야곰님이 링크를 올려주셨지만
http://minsone.github.io/mac/ios/swift-automatic-reference-counting-summary
해당 문서를 민소네님이 한글로 번역한 글이 있어서 링크 걸어둡니다!
2020-03-16 오전 9:42 #3373
-
-
글쓴이글
- 답변은 로그인 후 가능합니다.