2012-08-02 2 views
0

거기에 내 싱글 톤과 UIViewController에 문제가 있습니다. pushViewController:animated: 통해 애플리케이션의 다른 부분에 의해 사용UIViewController가 dealloc을 호출하지 않거나 두 번 호출하지 않습니다.

Singleton.h

@property (nonatomic, retain) UIViewController *viewController; 

Singleton.m

... 

@synthesize viewController = _viewController; 

- (void)load { 
    self.viewController = [[[UIViewController alloc] initWithNibName:@"NibName" bundle: nil] autorelease]; 
} 

- (void)unload { 
    [_viewController release]; 
} 

viewController. 하지만 때로는 싱글 톤 클래스 - (void)unload 메서드를 호출하여 viewController을 릴리스해야합니다. pushViewController:animated:viewController을 절대로 호출하지 않으면 모든 것이 잘되고 dealloc이 호출되지만 pushViewController (및 viewController가 viewDidLoad를 수행하는 경우) dealloc이 작동하지 않습니다. 내가 self.viewController = nil; 두 번 호출 dealloc 같은 일을한다면 ... 내가 뭘 잘못하고 있니 ???

+0

구조 - rootViewController --UINavigationController ---- UIViewController에 ------'viewController' -'과 pushViewController : 애니메이션 :' 나는 rootViewController를 해제하기 위해 노력하고있어 - 모든보기가를 릴리스 된'viewController'에만 문제가 있습니다. rootViewController를 릴리스하기 전에 - (void) unload를 호출합니다. –

답변

0

당신은 그것을 해제 후 nil로 설정해야합니다 잘못된 포인터로 물건을하려고합니다 함께 제공

[_viewController release]; 
_viewController = nil; 

그렇지 않으면 다음 사람.

1

귀하의 언로드 기능은 구성한다 : 당신이 전무로 유지 속성을 설정하면

- (void)unload { 
    self.viewController = nil; 
} 

, 그것은 인스턴스 변수 및 NILS를 해제합니다. 당신은 단순히 여기에 귀하의 재산에 매달려 포인터를 남겨두고있다. 모두의 ViewController UITabBarController가의

+0

작동하지 않습니다. [_viewController release]를 사용하는 경우에만; 및 self.viewController = nil; dealloc은 두 번 호출하지만. 어쩌면이 도움이됩니다 : _viewController 재생 MPMoviePlayerController 있습니다 ... –

+0

@RostK. 그 코드는 그것을 두 번 풀어주기 때문에 추가로 보유 할 수 있습니다. 악기를 사용하여이 변수의 유지 및 해제를 추적하십시오. – borrrden

관련 문제