awakeFromNib
함수에서 로컬 변수를 만들고 UIView
애니메이션 블록 내부에서 사용합니다. 그러나 결코 릴리스되지 않습니다. 이유는 무엇입니까? jQuery과가 해제되지 않습니다 그래서 여기 스위프트,이 로컬 var가 출시되지 않은 이유는 무엇입니까?
var fullPhotoDisposeBag = DisposeBag()
fullScreenImageView.rx.tapGesture().when(UIGestureRecognizerState.recognized).subscribe(onNext: { (tap) in
UIView.animate(withDuration: 0.15, delay: 0, options: UIViewAnimationOptions.curveEaseOut, animations: {
fullScreenImageView.frame = oldFullScreenFrame
}, completion: { (finished) in
fullScreenImageView.removeFromSuperview()
let _ = fullPhotoDisposeBag //This line avoid early release, but retains too much...
})
}, onDisposed:{
print("disposed")
}).addDisposableTo(fullPhotoDisposeBag)
하나의 단서가있는 tableView 내 응용 프로그램의 하나 개의 탭의 루트에 있다는 것이다 (A있는 UITableViewCell에로 awakeFromNib 내부) 코드입니다 재사용으로 인해 할당이 해제되었습니다. 그러나 ARC가 왜 그 변수를 유지합니까? 함수와 완료 블록에서만 사용됩니까?
PS : 나는 현재 내가 완료 블록에서 전무로 설정 옵션 DisposeBag를 사용하지만, 내가 그렇게해야하는 이유 이해가 안 ...
감사합니다. 그게 내가 생각한 것입니다. 불행히도 viewController, 코드를 이동합니다 불행히도 rxSwift 함께 disposeBag 선택적 선언하는 것보다 다른 방법으로, disposeBag 추가 할 때 unwrap ("!"사용하여 싫어) 다음 disposeBag 애니메이션이 끝나면 무효로하겠습니다. – Devous
완성 블록에서'fullPhotoDisposeBag = DisposeBag()'를 수행하는 것은 어떻습니까? 원래의'DisposeBag'을 비우고 유지주기를 깨고'Optional'을 사용하지 않아도됩니다. –