0

내가 모달의 ViewController 제공하기 위해 노력하고있어 전송 : 나중에 할 때 모달에, 나는 [referenceAddViewController 해제]를 호출하는 경우, 그러나해제 모달보기 콘텐츠 컨트롤러가 발생합니다있는 CALayer가 해제 - 메시지가 할당이 해제 된 경우

- (IBAction)addReference { 

    ReferenceAddViewController *referenceAddViewController = [[ReferenceAddViewController alloc] initWithNibName:@"ReferenceAddViewController" bundle:nil]; 
    [referenceAddViewController setDelegate:self]; 

    [self presentModalViewController:referenceAddViewController animated:YES]; 

    [referenceAddViewController release]; 
} 

을 보기가 닫히면 "[CALayer release] : 해제 된 인스턴스 0x4b90370으로 보낸 메시지"로 인해 내 응용 프로그램이 충돌합니다.

인스트루먼트에서 스택 트레이스 및 참조 카운트 내역을 수행해도 단 2 단계의 히스토리 단계만으로 결정적인 결과가 나오지 않았습니다.

  • 0 : 내 코드에 presentModalViewController의 Malloc 유지.
  • 1 : 카운트 -1 보관하지 않습니다 - 떨어져 main.m

그것은 하나의 참조 카운트 건너 뛰 -1하는 방법에 매우 흥미 롭다에서 내 코드에서 아무것도? Instruments는 모든 참조 횟수의 변경 사항을 기록합니까?

어떻게하면이 문제를 더 디버깅 할 수 있습니까?

답변

1

모달 뷰 컨트롤러를 닫은 후에 뷰 컨트롤러를 해제 할 필요는 없습니다. presentModalViewController:animated: 증분 retainCount 1 및 dismissModalViewControllerAnimated: 감소시키고 그것을 그것은 그래서 당신이 그것을 (+1)을 할당 할 때, 현재 1

(+1)으로하고 (-1) 해제, 나중에에 (기각 - 1) retainCount은 0이 될 것이고, 객체는 할당이 해제 될 것이고, 모두 괜찮을 것입니다. 해고 된 후에 놓으려고하면 해당 객체는 이미 할당이 해제되어 작동하지 않습니다.

0

답장을 보내 주셔서 감사합니다. 저는 항상 alloc을 호출 할 때 처음부터 참조 횟수를 1로 늘리는 것으로 생각했습니다.

presentModalViewController : animated :가 호출되면 참조 횟수가 2가됩니까?

모달보기가 닫히면 해제되지 않았으므로 다시 1이되지만 0이되지는 않습니까?

+0

'[referenceAddViewController release];를 호출하면 할당 한 객체가 해제됩니다. 'presentModalViewController'를 호출하면 아무 것도 할당하지 않으므로 아무 것도 공개하지 않아도됩니다. 사용자는 명시 적으로 할당 한 객체에 대해서만 책임이 있습니다. – iwasrobbed