2010-02-21 8 views
0

내 iPhone 앱에서 ModalViewController를 표시하는 데 꽤 표준적인 레서피를 사용하고 있지만 레서피가 손상되어 혼동하는 상황에서 실행했습니다.ModalViewController를 닫을 때 EXEC_BAD_ACCESS

MatcherViewController *controller = [[MatcherViewController alloc] initWithNibName:@"MatcherView" bundle:nil]; 
[controller setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; 
[controller setDelegate:self]; 
[self presentModalViewController:controller animated:YES]; 
[controller release]; 

이 항상 내가 믹스에 한 가지를 추가, 그리고 그것을 발표하기 전에 내가 좋아하는, 새로운 컨트롤러 객체에 메시지를 보낼 때까지 잘 작동합니다 : 이것은 (거의 항상) 나 프리젠 테이션을 설정하는 방법입니다 그래서 :

MatcherViewController *controller = [[MatcherViewController alloc] initWithNibName:@"MatcherView" bundle:nil]; 

[controller setPrimary:primaryIndex andSecondary:secondaryIndex]; 

[controller setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; 
[controller setDelegate:self]; 
[self presentModalViewController:controller animated:YES]; 
[controller release]; 

이 메서드 호출을 추가하면 내가보기 컨트롤러 ... 어떤에서 EXEC_BAD_ACCESS 신호와 응용 프로그램의 충돌 지점을 기각 할 때까지 작동하는 것 같다. [controller release]을 제거하면 여분의 선을 사용할 수 있지만 그 다음엔 누수가 발생할 수 있습니다. 프레젠테이션을하기 전에 개체에 메시지를 보내는 이유는 무엇입니까? 간단한 매개 변수를 ModalViewController에 전달하는 더 좋은 방법이 있습니까? 초보자를 교정에 시간

감사합니다; P 당신의 컨트롤러의 dealloc 방법에

+0

-setPrimary : andSecondary :에서 무엇을하고 있습니까? –

+0

매개 변수 (NSInteger)를 멤버 변수에 전달. – Devunwired

답변

0

저는 primaryIndexsecondaryIndex 이 부적절하게 유지 된 개체 인 인 것으로 추측합니다. 생존을 유지하는 모달보기에 의존합니다. 모달 뷰를 해제하면 코드가 죽어 있지만 다른 곳에서 호출되어 충돌을 일으 킵니다.

클래스의 유지 된 속성 인 경우 항상 "self.propertyName"구조로 액세스하여 보유 개수가 올바르게 관리되는지 확인하십시오.

내 경험에 비추어 볼 때 과도한 형태의 조기 최적화는 오늘날 Objective-C 두통의 주요 원인입니다. 올드 스쿨의 Objective-C 코더는 하루 동안 손으로 추적하는 것이 거의 불가능했기 때문에 누출에 대해 편집증 적이었습니다. 그래서 많은 리소스가 누출 방지에 중점을두고 있습니다. 그러나 현대의 분석 도구를 사용하면 누출을 추적하는 것이 일반적으로 쉽지 않습니다.

처음 개발하는 동안 의심 스러울 때 해제하지 마십시오.

+0

글쎄, 내 생각을 긁어 라. 나는 부모님의 두 번째 댓글 앞에 썼다. 분명히 그들은 물건이 아니다. 그러나 기본 아이디어는 건전합니다. 그것이 최종 릴리스 될 때 죽을 때보기는 그것과 함께 무엇인가 가져 가고있다. – TechZen

+0

나를 올바른 방향으로 안내해 주셔서 감사합니다. 정확한 범인은 건설 중 보유되지 않은 물건들에 대한 일부 석방이었다. – Devunwired

0

을, 당신이 위에 아무 것도 발표하지 않을 있는지 확인하십시오.

+0

올바른 방향으로 나를 가리켜 주셔서 감사합니다 여러분. 정확한 범인은 건설 중 보유되지 않은 물건들에 대한 일부 석방이었다. – Devunwired

관련 문제