기본적으로 chatroom을 제어하는 UIViewController가 있습니다. UIViewController가 어떤 식 으로든 초기화되면 현재 사용자가 채널을 나갈 필요가 있습니다.View Controller가 deinited 될 때 네트워크 호출을하는 것이 안전합니까?
현재, 내 코드입니다 : 나는 오직 deinit에서 NSNotificationCenter.defaultCenter().removeObserver(self)
과 같은 코드를 본 적이 그리고 난이 할 안전 여부에 대한 온라인 아무것도 발견하지 않았습니다
class ChatViewController: SLKTextViewController {
var channel: TWMChannel? = nil
// A ton of other code...
deinit {
channel!.leaveWithCompletion({
_ in
})
}
.
본질적으로이보기 컨트롤러는 UINavigationController 스택의 일부이며 뷰 컨트롤러가 팝되면 (항상 deinit이 호출되는 것을 상상한다) 사용자가 채널을 나가길 원합니다. 네비게이션 바의 상단 왼쪽 뒤로 버튼과 패닝 제스처를 처리하는 기본 방법이 있다면 구현을보고 싶습니다.
Rob, ** 1) ** 언제 'viewController'가 삭제 되었습니까? ** 2) ** 'viewDidLoad'가 다음 번에 (파괴 후)로드 될 때를 의미합니까? ** 3) ** 일반적으로 viewDidLoad는 두 번 호출됩니까? – Honey
보기 컨트롤러는 강력한 참조가 없을 때 파괴됩니다. 그것은 많은 것들에 달려 있습니다. 당신은 일반적으로 아무것도 그것에 의존하지 않아야합니다. 예, viewDidLoad는 뷰를 다시로드하기 때문에 다시 호출됩니다. 뷰를 구성하는 것 이외에는 viewDidLoad를 사용해서는 안됩니다. 화면이 꺼져있을 때 뷰 컨트롤러가 있다고 가정하지 마십시오. 화면 컨트롤러 일 때 뷰 컨트롤러 *가 더 이상 존재하지 않는다고 가정하지 마십시오. 뷰 컨트롤러는 뷰를 관리하기 위해 존재하며 다른 것은 없습니다. –
viewWillDisappear의 문제점은 홈 버튼을 누르기 만해도 호출된다는 것입니다.하지만 누군가가 앱을 열 때마다 떠나고 다시 가입하고 싶지는 않습니다. 뷰 컨트롤러가 팝업 될 때마다 나가고 싶습니다. 이상적으로, 나는 앱이 종료 될 때마다 나가고 싶지만 실제로는 가능하지 않다는 것을 알고있다. – David