2013-03-26 2 views
2

ARC를 처음 사용합니다. 내 문제는 뷰 컨트롤러에서 strong 유형의 속성을 만드는 경우 내비게이션 컨트롤러의 popViewController이 발생하면 해당 속성을 0으로 설정해야한다는 것입니다.iOS 6의 ARC 대 iOS 5의 버전

일반적으로, 우리는 viewDidUnload에 그렇게 할 것입니다. 하지만 iOS 6에서는 더 이상 사용되지 않습니다.

그래서 우리는 그 객체 nil해야합니까? Apple은 didReceiveMemoryWarning에서 그것을 수행한다고하지만 뷰 컨트롤러를 팝 할 때마다 그 메소드가 호출되지 않습니다.

답변

0

두 개의보기 컨트롤러를 터뜨리거나 푸싱하는 경우 UINavigationController의 포인터는 그들은 dealloc'ed 얻지 않는다. 그들은 dealloc'ed 얻을 경우 그들 모두는 dealloceded해야합니다. 이러한 뷰 컨트롤러의 새로운 복사본을 만드는 결과를 가져올 수는 있지만 기존 복사본이 이미 dealloc되어있는 경우에만 새 복사본을 만들기 때문에 문제가되지는 않습니다. 객체를 유지할 수있는 유일한 방법은 뷰 컨트롤러 (또는 그 안의 객체)가 서로를 참조하여 유지되도록하는 것입니다.

strongweak의 차이점은 수동으로 strong을 nil로 설정해야한다는 것이 아닙니다. 오히려 strong 관계는 객체가 유지되도록하며 weak은 유지하지 않습니다. 대다수가 대 상원 (상위가 아니고 대/소문자 인 객체)을 보유하기를 원하지 않으므로 대표는 일반적으로 weak으로 설정됩니다.

4

걱정하지 마십시오. 속성은 dealloc에 Objective-C 런타임에 의해 자동으로 nil으로 설정됩니다. 이는 뷰 컨트롤러의 콘센트가 아닌 모든 속성에 적용됩니다. 당신이 참조 된 개체에 대한 소유권을 유지하려는 경우

+0

하지만 내 app에서 동일한 viewController 여러 time.App 할당 크기를 늘리는 점점 사이에 전환하는 오전 충돌이 발생합니다. ARC 때문인 것 같아. – Sachin

+0

그러면 뷰 컨트롤러의 복사본을 여러 개 만들어서 다른 뭔가 잘못하고있는 것입니다. 물론 코드를 게시하지 않으면 도움이되지 않습니다. –

+0

코드를 넣을 수 없습니다. 그러나 나는 단순한 팝과 푸시를하고있다. 버튼을 누르면 AViewController로 이동하고 AViewController에는 뒤로 버튼이 있습니다. 그 버튼을 누르면 나는이 두 버튼 만 가지고 놀고있다. – Sachin

1

당신은 속성 strong을 정의합니다.

약한 속성이 필요할 수도 있습니다 (개체가 다른 사람이 출시 할 때 필요하지 않고 할당을 취소 할 수 있음) 또는 해결 방법을 viewDidDisappear 메서드에서 사용하지 않도록 설정할 수 있습니다. 하지만 짐 펄즈 (Jim Puls)가 말했듯이, 코드 작성을 보지 않고도 교육 된 추측에 불과합니다 ...