2016-07-14 4 views
0

메모리 사용량이 일정한 슬라이드 쇼보기 컨트롤러가 있으며, 탭하면 다른보기 컨트롤러로 전환됩니다. 스위치하는 동안 메모리 사용량이 급증하고 안정적으로 유지됩니다. (나는 보통이라고 생각합니다.) 그런 다음 30 초 후에 타임 아웃 &이 슬라이드 쇼보기 컨트롤러로 돌아가고 메모리 사용량이 원래보기 컨트롤러보다 높습니다. 두 스위치 모두 세그 (segues)를 사용하고 있습니다. &보기를 눌러 전환하면 메모리가 다시 급증합니다. 이번에는 지난 번에 스파이크 한 것보다 더 많이 급증했습니다. 이것은 영원히 계속 & 계속됩니다. 다음 그림은 다음과 같습니다UIViewController 사이를 전환 할 때 어떤 유형의 메모리 문제가 발생합니까?

enter image description here

이 경고는 콘솔에 진열 유지 :

경고 : 시도는 그보기 창 계층 구조에없는 에 제시!

어떤 유형의 메모리 문제가 발생하며 메모리 사용량이 증가 할 수있는 원인은 무엇입니까?

편집 :

여기

내가 슬라이드 쇼보기 컨트롤러에 다시 갈거야 방법입니다

timeOut = [NSTimer scheduledTimerWithTimeInterval:25 target:self selector:@selector(timeOutMethod) userInfo:nil repeats:NO]; 

-(void) timeOutMethod{ 

    [self performSelector:@selector(loadSlideshowView) 
       withObject:nil 
       afterDelay:5]; 

} 

-(void) loadSlideshowView{ 


    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    SlideShowViewController *myVC = (SlideShowViewController *)[storyboard instantiateViewControllerWithIdentifier:@"slideShowImages"]; 
    [self presentViewController:myVC animated:YES completion:nil]; 

} 
+0

시간이 초과되면 이전 컨트롤러로 어떻게 돌아갈 지 - 코드를 표시 할 수 있습니까? 원래의보기를 푸는 대신보기의 새로운 사본을 다시 표시하는 것처럼 들립니다. –

+0

@AliBeadle 나는 내 질문에 그것을 추가했습니다. – DCAdams

+1

지연 기간을 줄이고 어떤 결과가 나타나는지보십시오. 또한 슬라이드 쇼보기 컨트롤러는 이전보기 컨트롤러를이 컨트롤러에 연결합니까? 그렇다면보기 컨트롤러를 다시 표시하는 대신 dismissViewController 함수를 수행하면됩니다. – Konsy

답변

1

instantiateViewControllerWithIdentifier:에 대한 설명서로는 말합니다 :

이 방법은 생성 호출 할 때마다 지정된 뷰 컨트롤러의 새 인스턴스입니다.

그래서 시간이 초과 될 때마다 이전 컨트롤러가 백그라운드에서 메모리에 남아있는 동안 새로운보기 컨트롤러 복사본을 생성하게됩니다.

콘시 (Konsy)가 말했듯이, dismissViewController 또는 unwind segue을 사용해보세요.

+0

고마워요!이게 효과가있는 것 같아요, 처음으로 올라가지만 거기에 머무르면 더 이상 유지되지 않습니다. 매번 스파이크. – DCAdams

관련 문제