문제

나는 iPhone 개발에 익숙하지 않지만 첫 번째 앱 (내가 실행하는 웹 사이트와 관련된)을 공개하는 데 가깝습니다. 이 앱에는 매우 큰 데이터베이스가 필요하므로 가장 일반적으로 사용되는 데이터 만 로컬로 저장하기로 결정하여 웹 사이트가 실행되는 데이터베이스에서 JSON 웹 서비스 호출을 통해 다른 데이터를 검색했습니다.

웹 서비스 호출에 의존하는 시뮬레이터 (라이브 DB를 치기) 검색을 사용하여 OK를 수행하는 동안 전화로 실행할 때 원하는 것보다 오래 걸렸습니다. 이 전화는 순간적 인 기본 검색과 비교할 때 훨씬 더 나빠 보입니다. 상대적인 차이를 줄이기 위해 기본 검색에 대한 가짜 간극 (활동 표시기가 포함 된 페이지)을 넣고 싶었지만 (웹 서비스 검색은 이미 사용하고 있음) 수면 (N).

어쨌든, 내 앱의 검색 섹션은 TabController 탭이있는 NavController입니다. 다음과 같은 코드를 사용하려고 할 때 :

[[tabBarController.viewControllers objectAtIndex:0] pushViewController:(UIViewController *)waitingController animated:YES];
sleep(2);

푸시는 항상 수면이 끝날 때까지 기다립니다. 원하는 효과가 뷰 콘트롤러를 푸시하고 검색 프로세스를 계속 시뮬레이션하기 전에 2 초 동안 기다릴 때 원하는 효과가있을 때 실행하기 전에 잠을 기다립니다.

나는 NavController 푸시를 사용하여 다른 이상한 결과를 얻었습니다. 내가 원하는 곳에 남아있는 곳.

나는 내 비난에 대한 기본적으로 이해의 부족이 있다고 확신한다. 그래서 나는 여기서 약간의지도를 기대하고있다.

건배,

앨런.

도움이 되었습니까?

해결책

sleep(float) 메인 스레드를 차단하여 UI가 얼어 붙습니다. 대신 나중에 수행 할 조치를 예약해야합니다. -[NSObject performSelector:withObject:afterDelay:]

예시:

[label performSelector:@selector(setText:) withObject:@"Delayed Hello World!" afterDelay:2.0f];

다른 팁

나는 당신의 아키텍처를 바꾸고 메인 스레드에서 자지 않는 것을 보게 될 것입니다 - 훌륭한 사용자 경험이 아닙니다!

NSOperation을 사용하여 웹 서비스와의 상호 작용을 제어 할 수 있습니다.이를 통해 작업을 대기열하여 특정 시퀀스 또는 병렬로 실행할 수 있습니다.

NSOperation은 강력한 스레딩 작업을 제공하는 매우 쉬운 방법이며, 그 과정에서 수행하려는 모든 업데이트를 통해 기본 스레드로 다시 호출하도록 선택할 수 있습니다.

이 아키텍처는 사용자 인터페이스를 훨씬 더 좋게 만드는 데 도움이 될 것이라고 생각하지만 일단 작업을 사용하기 위해 생각을 재구성 한 후에는 다른 많은 이점을 찾을 수 있습니다.

NB : NSOperation과 NSOperationQueue를 실제로 파악하는 데 몇 번이나 걸렸습니다. 그러나 내가 투자 한 시간은 확실히 그만한 가치가있었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top