2012-09-29 14 views
1

인스 트루먼테이션에서 연주하면서, 나는 이해하지 못하는 것을 발견했습니다. 나는 UIViewController의 몇을 만들고 다른 UIView 그들의 view의 추가 :UIView에 UIViewController가 필요하지 않습니까?

CustomVC *vc = [[CustomVC alloc] initWithCustomInitializer:someParameter]; 
[mainView addSubview:vc.view]; 

을 그 initdealloc에 CustomVC의 메모리 주소를 기록함으로써, 나는, vc가 즉시 해제되는 것을 볼보기 남아 있지만 화면에 모든 것이 잘 작동합니다.

UIView에는 컨트롤러가 반드시 필요하지 않습니까? 아니면 제가 잘못 이해하고있는 다른 일이 있습니까?

답변

1

UIView는/당신이 UIViewController에 대한 참조를 드롭 만 UIView에 대한 참조를 유지, 그래서 만약 부모합니다 (UIViewController)를 유지 안, 아무것도 그것과에 강한 참조를 유지하지 않습니다 출시 예정.

해당 제어기에 대한 UIView의 약한 참조는 자동으로 nil로 설정됩니다.

UIView에 "손실 된"컨트롤러가 필요한지 여부는 또 다른 이야기이지만, 전체적으로는 UIView에 따라 다릅니다.

1

UIView에는 어떤 방법 으로든 ViewController가 필요하지 않습니다. 무슨 일이 일어나고 있는지 VC에 대한 포인터를 유지하고 있지 않을 것입니다. 보기에 대한 포인터는 mainView에 의해 유지됩니다. ARC를 사용하고 있는지 여부에 관계없이. 객체를 메모리에 유지하려면 강력한 객체 (ARC)가 있거나 객체를 보유해야합니다. 너를 혼란스럽게하지 말라. 반드시 사용자 정의 서브 클래스 일 필요는 없습니다. UINavigationController를 사용하고 있다고 가정 해 보겠습니다. 예를 들어 응용 프로그램 대리인에 컨트롤러를 만들고 UINavigation 컨트롤러에 밀어 넣을 수 있습니다. 뭔가가있는 한 포인터를 유지할 필요가 없습니다. 이것은 매우 근본입니다. 당신은 내가 여기서 충분히 설명 할 수있을 것이라고 생각하지 않는 메모리 관리에 대해 명확해야한다. iOS 개발에 대한 스탠포드 과정을 확인하는 것이 좋습니다. http://itun.es/ru/_zEGD

+0

감사합니다. 보기가 잠시 동안 만 사용되므로 주위를 둘러 볼 필요가 없으므로 호기심이 많습니다. –

+0

나는 VC 물건과 메모리 관리에 대한 명확성이 중요하다는 것을 과장 할 수 없다. 물론 그 가치는 잘 볼 가치가있다. Paul hegarty의 생각 (Objective-C를 개발했을 때 NeXT에서 일했다) – stringCode

0

한 번에 하나의 UIViewController 만 있어야합니다. 뷰 콘트롤러에 속한 뷰를 추가하는 것은 나쁜 습관이다.

위의 제약 조건 (또는 Apple의 디자인 결정)으로 인해 귀하의 질문에 대한 답변을 얻으려면 이제 다른보기 컨트롤러에서보기가 유지되고 vc에서 릴리스됩니다.

관련 문제