2013-10-02 5 views
0

단추를 눌렀을 때보기 컨트롤러 B를 표시하는 클래스 A의 함수가 있습니다. 그러나 뷰 컨트롤러 B의 초기 함수 (viewdidload 및 viewwillapear 포함)는 몇 초가 걸립니다. 뷰 컨트롤러 B의 기능에보기 컨트롤러를 초기화하는 시간을 줄이는 방법

- (void)showCataloguesBook:(id)sender 
    { 
     UIButton *btn = (UIButton *)sender; 
     CataloguesCoverView *coverView = (CataloguesCoverView *)[_coversArray objectAtIndex:btn.tag]; 
     NSString *bookID = [[self.dataArray objectAtIndex:btn.tag] objectForKey:@"bookID"]; 
     PageCurlViewController *viewController = [[PageCurlViewController alloc] initWithNibName:nil bundle:nil]; 
     viewController.defaultSize = coverView.image.size; 
     viewController.bookID = bookID; 
     [self presentViewController:viewController animated:YES completion:nil]; 
    } 

는 subViewController (UIPageViewController) 등, 내가 더 잘 향상되지 수를 추가 CoreData를 검색 들어 있습니다. 그래서, 내가 볼 수있는 버튼과보기 컨트롤러 B가 걸리는 대기 시간을 줄이기 위해 할 수있는 일은 무엇입니까?

+2

viewWillAppear에서 데이터 검색, 검색과 같은 무거운 물건을 사용하지 마십시오. 보기가로드되도록 한 다음 GCD를 사용하여 백그라운드에서 데이터를 가져 와서 일부로드 화면을 표시하십시오. 다른 방법은 가져 오기 데이터를 만들고 데이터 코드를 효율적으로 검색하는 것입니다. –

+0

예, 핵심 데이터 데이터를 가져 오는 방법을 보여주십시오. – HAS

+0

위의 모든 것을 감사드립니다! 당신이 말하는 것을 정말로 이해합니다. 제 경우에는 코드를 변경하고 개선해야하지만 지금은 많이 변경할 수 없었습니다. 그래서 Class A에서 트릭을하고, 기다리는 애니메이션을 추가했습니다! – fisher

답변

1

캐싱.

정말 간단한 방법은 viewController B에 대한 속성을 설정 한 다음 viewController A의 viewDidLoad에서 인스턴스화하고 속성에 저장하면 사용할 필요가있을 때 준비가됩니다. 처리를 할 필요가 없습니다.

아마도주의 사항을 취하여 didReceiveMemoryWarning의 viewController를 제거해야합니다.

더 많은 작업을 수행하려면 NSCache에서 메모리를 자동으로 관리 할 수있는 가능한 옵션을 캐싱 해보십시오. 복잡해지기를 원한다면 NSOperationQueue 및 NSOperation을 사용하여 앱을로드 할 때 백그라운드 스레드에서 이들 모두를 실행할 수 있습니다.

일부 정보를 저장하고 즉시 표시하려면 작은 쿼리를 만든 다음 나중에 더 많은 정보를 얻기 위해 더 큰 쿼리를 수행 할 수도 있습니다.

이 작업을 수행하는 데는 많은 방법이 있지만 대개의 경우 데이터를 저장하기 전에 현명한 방법으로 데이터를 저장해야합니다.

+0

솔루션을 자세히 제공해 주셔서 감사합니다. – fisher

관련 문제