dealloc을 제거 할 때마다 dealloc을 사용할 때마다 dealloc 대신 viewWillDisapper를 사용할 수 있다고 설명하는 link을 만났습니다.iOS에서 Observer를 제거하는 올바른 방법
답변
KVO의 중요한 점은 removeObserve 및 addObserver 호출과 일치해야하며 중복 된 옵서버를 추가 할 수 없다는 것입니다. 즉, 관찰자를 추가하는 위치와 제거한 위치를 신중하게 고려해야하므로 이러한 제한 사항 중 하나를 위반하지 않습니다.
viewDidLoad에 추가하면 현재 viewDidUnload가 더 이상 사용되지 않으므로 dealloc에서 제거하는 것으로 충분하지만보기가 표시되지 않으면 관찰자가 트리거 될 수 있습니다. viewDidUnload가 여전히 호출되는 구형 OS에서 실행중인 경우 관찰자가 언제 제자리에 있고 그렇지 않은지를 추적해야하므로 문제가 될 수 있습니다.
viewDid/WillAppear에 추가 할 수 있습니다.이 경우 viewDid/WillDisappear에서 제거해야합니다. 호출이 (일반적으로 말하면) 일치가 보장되기 때문에 일반적으로이 메소드는보다 깔끔합니다.
addObserver
/removeObserver
전화를 적절하게 페어링해야합니다.
당신은 다음과 같은 몇 가지 init
방법 또는 viewDidLoad
다음 dealloc
에 removeObserver
를 호출하면 호출되는 곳에서 addObserver
를 호출하는 경우.
viewWillAppear
과 같이 여러 번 호출되는 곳에서 addObserver
을 호출하면 removeObserver
을 viewWillDisappear
으로 호출하십시오.
중요한 것은 적절한 페어링입니다.
참조하는 링크는 상대적으로 유익하고 정확합니다.
나는 이러한 관점에서 생각 : 그것은 단지 화면에있는 동안
가) VC 알림을 필요합니까? viewWillAppear/viewWillDisappear를 사용하십시오.
b) VC는 그것이 살아있을 때 (화면 상 반드시 필요한 것은 아님) 알림을 받아야합니까? init 또는 viewDidLoad를 사용하고 dealloc에서 제거하십시오.
ARC에서 내 dealloc 메서드를 중단하고 예상 한대로 호출했습니다. 그러나 viewDidUnload는 호출되지 않습니다.
예, 저는 솔직하게 생각이 들었습니다.보기가 꺼져 있고 컨트롤러가 여전히 메모리에있을 때 상황에 직면 한 적이 없습니다. 우리가 사용하지 않는보기의 일부 컨트롤러가 필요할 경우 메모리 사용에 좋지 않다고 생각합니다.일반적으로 뷰가 꺼지면 제어기가 삭제됩니다. 필요한 모든 것이 데이터 모델에 있고 필요할 때 다시 복원 할 수 있기 때문입니다. 그래서 우리가 viewWillDisappear에서 관찰자를 지우면 우리는 우리의 기억을 부정확하게 사용하게됩니다. –
@MatrosovAlexander, 푸시 또는 모달 프레젠테이션을 수행하면 푸시 또는 모달 프레젠테이션을 수행하면 메모리에있는 컨트롤러 (푸시 한 프레젠테이션 컨트롤러 또는 프레젠테이션보기 컨트롤러)가 보이지만 화면이 꺼지는 컨트롤러가 있습니다. 실제로 이것은 매우 일반적입니다 상태. – rdelmar
그래, 이해가되지만 어떤 경우에는 좋지 않다. 컨트롤러를 여러 번 눌러서 내 앱이 작동을 멈추게한다. –
- 1. ios에서 암호를위한 AES128Encryption의 올바른 방법
- 2. ios에서 문자열 앞에 공백을 제거하는 방법
- 3. iOS에서 UITableView의 최종 줄을 제거하는 방법
- 4. ios에서 UITabBarController에서 탭 막대를 안전하게 제거하는 방법
- 5. iOS에서 GPS를 사용하기위한 올바른 접근 방법
- 6. iOS에서 네트워크 연결을 확인하는 올바른 방법
- 7. iOS에서 맞춤 개체를 저장/직렬화하는 올바른 방법
- 8. rspec을 사용하여 Mongoid :: Observer를 테스트하는 방법
- 9. 이 ActiveRecord :: Observer를 Service 개체로 변환하는 방법?
- 10. Observer를 사용하여 Grandtotal/BaseGrandTotal을 설정하는 방법. [젠토]
- 11. 레일스 모델 객체에서 속성을 제거하는 올바른 방법
- 12. @ManyToMany 목록에서 객체를 제거하는 올바른 방법
- 13. GridGain : 목록에서 키를 제거하는 올바른 방법
- 14. jQuery를 사용하여 클래스를 제거하는 올바른 방법
- 15. 올바른 방법 iOS에서 하드 코딩 된 트위터 계정을 사용하는 방법
- 16. 올바른 방법 iOS에서 게으른 SQL 쓰기를 수행하는 방법
- 17. observer를 사용하여 세마포어에 신호를 보내시겠습니까?
- 18. Observer를 제거 할 수 없습니까?
- 19. Java에서 Observer를 사용하여 MVC 이해하기
- 20. Merit Rails Gem의 Observer를 사용하여 포인트를 제거
- 21. 은 (iOS에서) 크롬에서 선택 상자에 배경을 제거하는 방법
- 22. ios에서 여러 개의 하위보기가있는 superview에서 특정 하위보기를 제거하는 방법
- 23. iOS에서 AssestsLibrary로 다음 Apple Mach-O-Linker 오류를 제거하는 방법?
- 24. ios에서 앱을 다시 시작할 때 검정색 화면을 제거하는 방법
- 25. iOS에서 슬라이드가있는 하위보기를 제거하는 방법은 무엇입니까?
- 26. ios에서 line 용 CGContext를 제거하는 방법은 무엇입니까?
- 27. iOS에서 앱을 완전히 제거하는 방법은 무엇입니까?
- 28. iOS에서 앱을 제거하는 동안 캘린더 일정 삭제
- 29. iOS에서 Javascript Plugin 코드를 제거하는 방법은 무엇입니까?
- 30. 사용자 정의 UIDatePicker에서 ios에서 올바른 시간을 얻는 방법
답변 주셔서 감사합니다. 어떻게 관찰자와 어떻게 작동하는지 그리고 필요한 로직에 달려 있지만 뷰에서 사용한다고 생각합니다 .Disappear는 메모리 사용으로 좋지 않습니다. 예를 들어 IBAction도 추가 할 수 있습니다. 예를 들어보기를 숨기고 관찰자도 제거하십시오 =) 또는 다른 미친 아이디어) –
'viewWillDisappear'에서 관찰자를 제거하는 메모리 문제가 있다고 생각하는 이유를 모르겠습니다. 앞서 언급했듯이'viewWillAppear'에서'addObserver'를 호출하면'viewWillDisappear'에서'removeObserver' 만 호출하면됩니다. 그것이 당신의 필요를 충족시키지 못한다면 두 가지 방법으로 옵저버를 설정/제거하지 마십시오. 귀하의 필요에 맞는 쌍을 사용하십시오. – rmaddy
그래서, 신경 쓰지 마세요) 나는 단지 제안을 듣고 싶었고 모든 대답이 좋다. 나는 내가 혼란스러워했다고 생각한다. –