UIView 애니메이션 블록에서 이상한 경험을했습니다.iOS가 UIView 애니메이션 완성 블록을 정리하지 않습니까?
내 애니메이션 코드를 실행 한 후 결코 해제하지보기. 애니메이션 코드를 호출하기 전에 view 속성을 nil로 설정했습니다. 그런 다음 완료 블록 내에서 슈퍼 뷰에서 제거한 후 페이드 아웃 한 후 사라졌습니다.
는하지만 그 -dealloc은 페이드 아웃 및 제거보기는 호출되지 않습니다. 그런 다음 완성 된 블록이보기를 유지하고 작동하는 __weak
을 사용하여 약한 참조를 만든 것 같습니다. 갑자기 애니메이션 완료 후보기가 제대로 할당 취소되었습니다.
그러나 애니메이션 블록 자체
나는 단순히 뷰를 참조하고 뷰의 할당 해제 제대로 0으로 여전히__weak
참조 및 알파를 설정합니다.
결론 : iOS는 애니메이션이 완료된 후 애니메이션 블록을 정리합니다. 그러나 완료 블록을 정리하지는 않습니다. 의미 : __weak 참조는 완료 블록의 모든 항목에 대해 영원히 사용되므로 사용해야합니다.
은 모든 강한 참조를 해제 있도록 작업을 종료 한 블록 폐기 또는 정리를 트리거 할 수있는 마법의 방법이 있나요? 물론 ARC btw를 사용합니다.
귀하의 결론이 잘못되었음을 이미 알고 계시길 바랍니다. Caleb가 메모리 누수로 이끄는 완성 블록에 대한 강력한 참조를 'self'가 가진다면 * Caleb가 제안한대로주기를 유지할 수 있습니다. 그러나 이것은 표준'+ [UIView animate ...] 메소드를 사용하는 경우에는 발생하지 않습니다. 코드를 게시 할 경우에만 더 도움을 줄 수 있습니다. – Mar0ux