2011-02-04 4 views
0

내가 원할 때 uiimage/view/subviews를 릴리스해야하며,이를 공개하는 적절한 관행에 관해 몇 가지 질문이 있습니다.(iphone) uiimage, view, subviews 메모리 관리

  1. [imageView removeFromSuperview] imageView 및 imageView.image가 출시 되나요?

  2. view = nil; 하위 뷰/관련 uiimages를 재귀 적으로 릴리스하겠습니까? 그렇지 않다면보기의 하위보기를 해제하는 재귀 함수를 구현해야합니까?

당신에게


편집을 감사드립니다.

이 방법은보기를 유지하고 이 새로운 수퍼 인 수신기에 자사의 다음 응답을 설정 -

나는 UIView의 도서관 기준에

addSubview를 보였다.

removeFromSuperview - 수신기의 수퍼은 전무가 아닌 경우

는 수퍼은 수신기를 해제합니다. 보기를 다시 사용하려는 경우 을이 방법으로 호출하기 전에을 호출하고 나중에 적절하게 다시 해제하십시오.

여전히 [imageView release]와 연결된 uiImage는 이며, 여전히 하위 뷰를 재귀 적으로 릴리스해야합니다. 뷰의 할당이 해제되면 서브 뷰가 자동으로 해제됩니다.

답변

1

[이미지 뷰가 removeFromSuperview] 이미지 뷰 및 imageView.image 해제 것인가?

removeSuperView calls release on the view,하지만 조회수 유지에주의해야합니다. removeFromSuperview를 호출했다고해서 그것이 원하는 것을하는 것은 아닙니다.

view = nil; 서브 뷰/관련 이미지를 및 관련 이미지 을 반복적으로 릴리스하겠습니까? 그렇지 않다면 보기의 하위보기를 해제하는 재귀 함수를 구현해야합니까?

아니요, 작성하는 동안 하위 뷰를 관리 한 방법에 따라 수행하고 싶을 수도 있습니다.일에 출시를 호출, 당신의 마지막 질문에 대답하기 위해, 아니 :

for (UIView* subview in view){ 
    [subview removeFromSuperView]; 
    [subview release] 
} 
[view release]; 

편집 : 수퍼는 유일한 참조를했다, 그들은 가능성이 removeFromSuperview가) 오류가 발생합니다 호출 한 후 릴리스를 호출 따라서 유지 (1)의 수와이 뷰는 모든 하위 뷰에서 자동으로 release를 호출하지 않습니다. 릴리스 또는 removeFromSuperview와 상관없이 직접 수행해야합니다.

+0

나는 'release'dealloc 아니라고 말했다, 메모리 보유 수를 0 일 때 dealloced 알으십시오. (나는 다른 모든 참조를 처리 할 것이다 알고) recursive subview 릴리스에 대한 설명 주셔서 감사. 재귀 removeFromsuperview (또는 릴리스) 뷰의 하위 뷰의 모든 decendents 해제 구현해야 할 것이다. : – eugene

+0

그렇다면 imageView.image = nil은 uiImage를 릴리스해야하며 그렇지 않으면 [imageView release]도 imageView.image를 릴리즈 할 것입니까? – eugene

+0

UIImageView는 dealloced 될 때 모든 데이터를 해제한다고 가정 할 수 있습니다. UIImageView에서 호출 릴리스 데이터에 대한 릴리스 호출하지 않습니다. – jakev

1

[imageView removeFromSuperview]을 실행하면 아무 것도 해제하지 않습니다. 나중에 [imageView release]해야합니다. 그럼에도 불구하고, 당신은 여전히 ​​imageView의 dealloc에 ​​그 견해를 위해 여러분의 기억을 풀 필요가 있습니다.

+0

[parentView addSubview : childView]가 childView를 유지하고 [parent removeFromSuperview : childView]가 childView를 릴리스한다고 생각합니다. 두 가정 모두 틀린가? – eugene

+0

당신이 옳을 수도 있습니다. 내가 언급 한 방식은 내가 언제나 그럴 줄 알았던 방법이다. 다른 사람이 내가 틀렸다는 것을 알 수 있습니다. :) –