2014-01-11 2 views
0

나는 Apple의 design patterns 문서 및 기타 몇 가지 안내서를 읽었으며 이해할 수없는 것들이 있습니다.모달 뷰 컨트롤러 수명주기?

viewControllers 사이에 변수를 전달하는 문제가 발생하여 delegate 옵션을 보았습니다. viewControlA에서 viewControlB으로 이동하여 mutableArray을 B에서 A로 업데이트해야 할 경우 B의 대리인을 게시 할 수 있으며 A가 그 사실을 알 수 있습니다.

A이 대표자의 말을들을 수 있다면 그 말은 B에 도착한 후에도 A가 여전히 살아 있음을 의미합니다. 나는보기 사이에 push이있을 때만 이전이 여전히 살아 있다고 생각했지만, 전환이 modal 일 때 이전 장면은 실제로 죽었습니다.

각보기 컨트롤러 클래스의 수명주기는 얼마나됩니까? 그들은 항상 살아 있습니까?

답변

2

당신은 AB라는 두 UIViewController들, 그리고 당신이 B 모달, 메모리에 A 숙박을 표시합니다. 제거 할 사람이 아무도 없습니다 (코드의 다른 부분에서 제거 될 때까지는 사실임). A

그래서, A는 후자 (B)까지 B에 응답 A (presentingViewController)의 presentedViewController을 유지 할 수 있습니다.

delegate에 대해 그냥 피할 수 있습니다. 예를 들어, 모달 컨트롤러로 B을 발표하기 전에

@property (nonatomic, strong) NSMutableArray* myArray; 

같은 속성으로 AB, 당신은

B* b = // alloc init 
b.myArray = [self myArray]; 
// present modally B 

지금 그들은 같은 배열을 만질 말할 수있는 가정하자. B이 닫히면 (참조가없는 경우 메모리에서 해제 됨) myArray ( A)으로 변경하면 B으로 수정됩니다.

분명히 이것은 단지 예일뿐입니다. 그리고 이것은 delegate을 사용하지 않는 충고가 아닙니다.

자세한 내용은 Apple Doc. Presenting View Controllers from Other View Controllers을 참조하십시오.

+0

대단히 감사합니다! 그렇다면 A는 언제 메모리에서 삭제 되었습니까? 내가 A에서 B와 C로 가면, 모든 체인이 기억에 남는거야? B를 해산하여 B에서 A로 간다면 B가 죽은 것보다? – Curnelious

+0

@Curnelious 당신은 객체 그래프의 관점에서 생각할 필요가 있습니다. ROOT -> A -> B. B가 해제되면 ROOT -> A가됩니다. ROOT가 A를 닫으면 ROOT 만 나타납니다. 추신 당신이 원한다면 Upvote도. 건배. –

+0

@Curnelious 분명히 당신은 유지 사이클을 봐야합니다. 이것에 대한 내 대답을 참조하십시오 http://stackoverflow.com/questions/11168916/weak-or-strong-for-iboutlet-and-other/11170327#11170327. 그것은 많은면을 다룹니다. –