저는 메모리 관리에 큰 문제가 있습니다. 실제로는 커다란 잡지와 자신의 PageViewController로 렌더링되는 모든 페이지가 있습니다. 여러분이 언젠가 봤다면 내 문서는 애플 문서의 PageControl 예제를 기반으로합니다.viewController와 그의 뷰를 NSMutableArray 뷰 컨트롤러에서 해제하는 방법은 무엇입니까?
그래서 "MainViewController"의 viewDidLoad에서 NSMutableArray = self.viewControllers를 NSNull 객체로 만듭니다. 그리고 내 첫 번째 및 두 번째 페이지에 대해 [self loadScrollViewPage:page];
이라고 부릅니다. 사용자가 더 많은 페이지를 탐색 할 때 scrollViewDidScroll에서 더 많은로드가 호출됩니다. [self loadScrollViewPage:nextPage];
으로 앱이 필요합니다. 또한 unloadScrollViewPage:page
을 구현합니다. 왜냐하면 잡지가 너무 커서 그럴 경우 메모리가 없어지기 때문입니다.
- (void)loadScrollViewPage:(int)pageNumber
{
if ((pageNumber < 0) || (pageNumber >= [self.viewControllers count]))
return;
PageViewController *controller = [self.viewControllers objectAtIndex:pageNumber];
if ((NSNull *)controller == [NSNull null])
{
controller = [[PageViewController alloc] initWithPage:[self.pages objectAtIndex:pageNumber]];
[self.viewControllers replaceObjectAtIndex:pageNumber withObject:controller];
[controller release];
}
if (controller.view.superview == nil)
{
CGRect frame = mainpageScrollView.frame;
frame.origin.x = 0;
frame.origin.y = frame.size.height * pageNumber;
controller.view.frame = frame;
[mainpageScrollView addSubview:controller.view];
}
}
- (void)unloadScrollViewPage:(int)pageNumber
{
if ((pageNumber < 0) || (pageNumber >= [self.viewControllers count]))
return;
if ((NSNull *)[self.viewControllers objectAtIndex:pageNumber] != [NSNull null])
{
[[[self.viewControllers objectAtIndex:pageNumber] view] removeFromSuperview];
[self.viewControllers removeObjectAtIndex:pageNumber];
[self.viewControllers replaceObjectAtIndex:pageNumber withObject:[NSNull null]];
}
}
문제는 상관없이 내가 loadScrollViewPage
를 호출하고 unloadScrollViewPage
으로 감소하지 않을 때, 메모리가 여전히 크기를 증가 얼마나 많은 내가 unloadScrollViewPage
전화 번입니다 :
그래서,이 내 코드입니다. 사용자가 (? LOL, 300 페이지의) 10 페이지에가는 때, 내 응용 프로그램의 메모리 크기는 내 질문은 :(
인 100MB 물론, 그것은 충돌입니다 :
- 내 self.viewController NSMutableArray에서 정확하게 메모리를 해제합니까?
- superView (MainViewController 뷰)에 놓은 각 컨트롤러의 뷰는 removeObjectAtIndex : pageNumber를 self.viewControllers에서 해제 할 때 해제합니까? 할 수 있을까요? 내 문제입니까?
고맙습니다.
편집 :
이 Firoze Lafeer 처음에 바로 것처럼, 문제는 유지 제를 UIImage 메모리 관리 및 나의 전망했다 보인다. 난 단지 각 UIViewFromSuperview를 제거 할 수 있습니다. 이미지의 경우, [UIImage imageNamed]
을 사용하는 것처럼 보입니다. 이는 캐시를 구현합니다 (ios가 원하는 경우이를 해제합니다). 난 그냥 캐시를 구현하지 않는 내을 사용하는 방법을 변경하고 내 모든 개체는 지금 행복합니다. 감사합니다 여러분. :)
보기에 여러 개의 하위보기가있는 경우 각 하위보기를 제거해야합니까? ... 실제로 실제로 넣은 scrollView에서보기를 제거하지만 메모리가 줄어들지는 않습니다. 어떤 생각? – Linnk
보기를 제거하면 모든 하위보기뿐만 아니라보기 계층 구조도 제거됩니다. 뷰가 아직 할당 해제되지 않은 경우, Instruments에서 이력을 확인해야합니다. 사실, 당신은 인스트루먼트를 사용하여 이것이 당신의 기억이 가장 먼저 떠오르는 곳인지를 확인할 수 있습니다. 보기에 이미지를로드하는 경우 올바르게 관리하고 있습니까? –
인스트루먼트의 어떤 구성 요소가이를 수행 할 수 있습니까? – Linnk