2011-09-09 3 views
1

멀티 뷰 앱이 있는데 메모리 문제가 있습니다. 몇 가지 조언을 부탁드립니다. 사용자가 일부보기간에 변경할 수있는 스위치 컨트롤러를 처음로드하는 애플리케이션이 있습니다. 어떤 시점에서 나는 switchview 컨트롤러를 제거하고 창에 또 다른 서브 뷰를 추가하려고합니다. 따라서, 공유 애플리케이션의 델리게이트에 액세스하여 switchview 컨트롤러를 제거하고 두 번째를 삽입했습니다. 이해가 가지 않습니다. 이것이 올바른 접근 방식이 있다면 나는 두 번째 컨트롤러의 retainCount 값을 인쇄하고 19를 보여주는 이후 메모리 누수가 발생할 것을 두려워 !!!!!iOS - MultiView Application - Memory concerns

다음은 내 코드의 스냅 샷입니다. 올바른 방법입니까? 이러한 메모리 누수를 피하려면 어떻게해야합니까? 내 ApplicationDelegate에서 확인

나는 또한 내가 그 컨트롤러를 합성하고

[self.window addSubview:switchViewController.view]; 
[self.window makeKeyAndVisible]; 

통지를 추가하고 해제

하는 .m 파일에
MyAppDelegate.h 

@class SwitchViewController; 
@class SecondController; 

@interface MyAppDelegate : NSObject <UIApplicationDelegate> { 

    SwitchViewController *switchViewController; 
    SecondController *secondController; 
} 


@property (nonatomic, retain) IBOutlet SwitchViewController *switchViewController; 
@property (nonatomic, retain) IBOutlet SecondController *secondController; 

@property (nonatomic, retain) IBOutlet UIWindow *window; 

@end 

속성으로 설정이보기 컨트롤러가 dealloc 함수에서

이제 내 문제가 있습니다! SwitchViewController.m에서 나는 윈도우의 서브 뷰로서, 현재 SwitchViewController를 제거하고 내 secondController을 배치 내 응용 프로그램의 위임에 액세스하려면 : 여기

SwitchViewController.m 

SecondController *secondController2= [[SecondController alloc] init]; 

MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 

[appDelegate.switchViewController.view removeFromSuperview]; 

    appDelegate.secondController = secondController2; 

    [appDelegate.window addSubview:appDelegate.secondController.view]; 

    [secondController2 release]; 

질문입니다. [appDelegate.secondController retainCounter]를 인쇄하면 19가됩니다. 올바른 방법입니다. 실제로 메모리 누수가 있습니까? 사전에

감사합니다,

안드레아스

+0

개체의 보유 횟수를 사용해서는 안됩니다. 그것은 거의 혼동을 일으킬 정도로 거의 사용되지 않습니다. – Mats

+0

팁을 주셔서 감사합니다. 아직도, 내 앱 대리인의 윈도우에서 다른 하위 뷰를로드하는 올바른 방법이라고 제안 하시겠습니까? 그것은 메모리 안전합니까? – andreasv

답변

1

귀하의 접근 방식은 사운드 보이지만 그냥 째려보다 테스트하기 위해 더 나은 방법이 있습니다. 누출이 있는지 테스트하려면 Mac과 함께 제공되는 Instruments 도구를 사용하십시오.

또한, 보조 노트로, 전환이 도움이

[UIView transitionFromView:appDelegate.switchViewController.view 
        toView:appDelegate.secondController.view 
        duration:1.0 
        options:UIViewAnimationOptionTransitionNone 
       completion:nil]; 

희망을 할 수있는 더 좋은 방법이있다.

+0

Silvae 매우 도움이됩니다. 답장을 보내 주셔서 감사합니다. 나는 그저 눈을 뜨지 않았고 실제로 누수가 발견되지 않은 Instruments 도구를 사용했습니다. 나는 올바른 접근법을 사용하고 있다고 생각하지 않습니다. 그냥 맞지 않을 것 같습니다. – andreasv

+0

악기가 그것이 옳다고 말한다면, 걱정할 필요가 없다고 말하고 싶습니다. – Silvae

+0

확인해 주셔서 감사합니다. :) – andreasv