2012-11-13 1 views
0

UIView 하위 클래스가 있는데 어떤 경우에는 5 초 동안 해당 색을 변경 한 다음 다시 색을 변경해야합니다. 사용 된 메서드는 performSelector:afterDelay:이고 전달 된 선택기는 색상을 다시 변경하는 것입니다. 색상 변경 방법이 해고되기 전에보기가 superview에서 제거되는지 궁금 해서요. 그러면 문제가 발생합니까? 또는 뷰 객체 자체가 존재하지 않기 때문에 호출되지 않습니다.UIView 하위 클래스 : performSelecter : withDelay : 5 초가 지나면 3 초 후에보기가 제거됩니까?

감사합니다.

답변

2

performSelector:withObject:afterDelay:을보기로 보내면 기본적으로보기가 생성됩니다. 타이머는 뷰와 인수 객체 (경우에 따라 UIColor)를 유지합니다. 따라서 수퍼 뷰에서보기를 제거하더라도 타이머는 여전히보기를 유지하고 할당 취소를 방지합니다.

타이머가 작동하면 (오프 스크린)보기의 배경색이 변경되고보기가 해제됩니다. 그것이 뷰에 대한 마지막 강력한 참조 인 경우 뷰는 할당 취소됩니다.

창 계층 구조가 아닌 뷰의 배경색을 변경하면보기가 새로운 배경색 설정을 기억하지만 화면에 그려지는 것처럼 다른 작업을 수행하지 않습니다.

performSelector:withObject:afterDelay:을 사용하여보기의 배경색을 변경하면 지연 시간이 만료되기 전에 수퍼 뷰에서보기를 제거하더라도 아무런 문제가 발생하지 않습니다.

관련 문제