문제

나는 가지고있다 uiviewcontroller 인스턴스와 내가 그것을 공개 할 때 그것을 발표 할 때 거래 방법을 호출합니다.

나는 그것을 Dealloc 방법으로 일부 객체를 발표했습니다. uiviewcontroller.

내가 댓글을 달면 [super dealloc] 앱은 잘 작동하지만 그렇지 않으면 충돌하지 않습니다.

나는 그 방법에서 내가하고있는 릴리스에 문제가 없다고 생각하지만 [super dealloc] 충돌하고 있습니다.

누구든지 나를 도와 줄 수 있습니까?

도움이 되었습니까?

해결책

더 많은 정보없이 게시물에서 말하기 어렵지만 Dealloc 방법이 다음과 같이 보입니까?

- (void)dealloc {

    [super dealloc];

    self.someProperty = nil;
}

그렇다면 거래 된 인스턴스에서 세터 메소드를 호출하기 때문입니다. 항상 [Super Dealloc]에게 전화해야합니다.

- (void)dealloc {

    self.someProperty = nil;

    [super dealloc];

}

그것이 도움이되는지 확실하지 않습니다. 거래가 아닌 경우 Daleloc 메소드의 모습을 게시하십시오. 어둠 속에서 문제를 해결하기가 어렵습니다.

다른 팁

더 많은 정보 없이는 당신을 도울 수 없습니다. 설명한 코드는 완벽합니다. 문제는 앱의 다른 부분에 있습니다.

view 컨트롤러를 출시 한 후에는 뷰 컨트롤러에 액세스 할 수 있으므로 문제는 [super dealloc] 그러나 뷰 컨트롤러에 액세스하는 응용 프로그램의 다른 장소.

어쩌면 당신은 잘못된 장소에서 컨트롤러를 공개하고있을 것입니다. 그렇기 때문에 ViewController.m의 [Super Dealloc]가 충돌하는 이유 일 수 있습니다.

해당 컨트롤러가 죽을 때까지 [ViewController 릴리스]를 호출해서는 안됩니다. 예를 들어, ViewController 만있는 응용 프로그램이있는 경우 응용 프로그램이 끝날 때까지 해제해서는 안됩니다. 컨트롤러가 뷰를 제어하기 위해 항상 살아남아야하기 때문입니다. ApplicationDelegate에 이와 같은 것이 있으면 충돌합니다.

- (void)applicationDidFinishLaunching:(UIApplication *)application {
UIViewController *controller = [[UIViewController alloc] init];
[window addSubview:controller.view];
[controller release]; //this will crash
}

그 대신에 뷰 컨트롤러를 헤더 파일 (.h)에 배치하고 Dealloc 메소드에서 해제해야합니다.

- (void)dealloc {
[controller release];
[window release];
[super dealloc];
}

이게 도움이 되길 바란다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top