ARC를 사용하고 iOS7 (iPhone 5S)에서 테스트 중입니다.메시지가 백그라운드로 갈 때 할당 해제 된 인스턴스로 보냄
푸시 된 UIViewController (b)가있는 내비게이션 컨트롤러 (a)가 있습니다. b는 수동 segue를 통해 모달 NavigationViewController (c)를 제공합니다. c는 UIViewController (d)를 푸시합니다.
이제 우리에게는 루트와 모달이 각각 2 개의 탐색 스택이 있습니다.
배경으로 갈 때마다 모달 NavigationViewController (c)와 그 모든 자식을 닫습니다.
의 UIViewController에서(B) 나는 다음과 같은 코드가 있습니다
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(enteredBackground:)
name:UIApplicationDidEnterBackgroundNotification object:nil];
}
-(void)enteredBackground:(NSNotification *)notification{
if (self.presentedViewController) {
[self dismissViewControllerAnimated:NO completion:nil];
}
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
나는 배경에 갈 때 나는 C의 rootViewController에 나는 경우는 잘 작동하지만 충돌 내가
2013-10-20 22:49:49.008 MyApp[2596:60b] *** -[UIView release]: message sent to deallocated instance 0x17036aa40
D.
어떻게 수정합니까? 모달 탐색 스택의보기가 dealloc
으로 전송되고 이미 릴리스 된 것처럼 보입니다. 디버거를 살펴본 후에 모달 nvaigationcontroller (c) 자체가 여전히 존재하는 것 같습니다.
해고 할보기 컨트롤러의 일부 유지/해제 코드에 문제가 있어야합니다. 해지 된 컨트롤러 주변에 더 많은 코드를 제공하십시오. –
보유/해제 코드가 없습니다. 나는 호를 사용하고있다. 나는 또한 이러한 객체들에 대해 명시 적으로 약하거나 강한 속성을 선언하지 않는다. –
ARC는 retain/releases가 없음을 의미하지는 않습니다. 여전히 고정 또는 할당을 정의해야합니다 (유지 또는 할당으로 변환 됨). 유지 보수/릴리스의 기본 사항을 잊지 않고 MRC를 사용하고 수동으로 관리하는 방법을 알고 나면 ARC로 이동하여 기본 실수를하지 않아야합니다. –