나는 한 무리의 UIButton 하위 클래스를 인스턴스화하고 self.view 및 변경할 수있는 배열에 추가하는보기 컨트롤러가 있습니다. 이 하위 클래스에는 차례대로 다른보기를 가리키는 retain 속성이 있습니다. 대부분의 경우 뷰 속성은 UIButton 하위 클래스 인 'superview (추가 된 뷰 컨트롤러의 self.view)를 가리 킵니다. 그러나 항상 그런 것은 아니며 꼭 그런 것은 아닙니다. 그래서 내가이 속성을 사용하고 상속받은 superview를 사용하지 않는 이유입니다.서브 뷰의 dealloc을 호출하지 않도록 뷰 유지주기를 수정하는 방법은 무엇입니까?
난 데 문제는 뷰 컨트롤러의 할당 해제가하는 때이다 :
- (void)dealloc
{
[UIBUttonSubClassesArray release];
[super dealloc];
}
있는 UIButton 서브 클래스 '의 dealloc 호출되지 않습니다. 따라서 이러한 하위 클래스의 뷰 속성에 대한 추가 릴리스가 호출되지 않고 뷰 컨트롤러가 할당 해제 된 경우에도 각 UIButton 하위 클래스에 대해 한 번 뷰 컨트롤러 뷰가 누출됩니다.
대신에 내가 dealloc에서 release를 호출 할 필요가 없도록 서브 클래스의 view 속성을 assign으로 만들면 dealloc이 호출되고 뷰를 참조하는 코드가 없을 때에도 응용 프로그램이 충돌합니다.
아이디어가 있으십니까?
분명히 아크가 없으므로 버튼을 놓을 수 있습니까? – CodaFi
superview 이외의 다른보기가 귀하의 버튼을 참조합니까? –
@CodaFi ARC 권한 없음. 그리고 버튼은 배열에서 release를 호출 할 때 해제되어야합니다 (배열은 release를 호출해야합니다). 또한 배열을 해제하기 전에 removeAllObjects를 호출 해 보았습니다. – SaldaVonSchwartz