2

CUSTOM_VIEW의 CLASS 감소 디스패치 큐를 관리한다. custom_view 인스턴스에 저장된 속성/변수를 기반으로 custom_view에서 값을 계산합니다.제대로 전화 가열 아이폰 OS

의 ViewController의 CLASS는 :

나는의 ViewController 클래스에 custom_class 의 인스턴스를 생성하여 일부 7 ~ 9 뷰의를 표시합니다.

내 custom_class는 매 1 초마다 새로운 계산 된 값을 표시하므로 dispatch_async를 사용하여 계산 코드를 실행했습니다. 그래서 그것은 UI 스레드에 영향을주지 않습니다.

custom_view.m는

그러나
static dispatch_queue_t queue; 
    queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0); 

     dispatch_async(queue, ^(void) 
         { 
          [self calculateViewValue]; 
         }); 



-(void) calculateViewValue 
{ 
int wait = [self generateRandomNumberWithlowerBound:10 upperBound:20]; 

           for (int i = 0; i<= wait; i++) 
           { 
           // value calculation 

            [[NSOperationQueue mainQueue] addOperationWithBlock:^ 
            {custom_view_instance.text = value;}]; 

           sleep(1); 
           } 
} 

,이를 실행 한 후 아이폰은 잠시 후 가열! 내가 잘못했거나 누락 된/최선의 방법을하고 있습니까 ???

답변

2

보기에서 계산을하지 마십시오. 컨트롤러가 수행합니다. 어쨌든 UIKit에서 절전 모드를 호출하지 않습니다. 더 나은 접근 방법은 다음과 같습니다. (코드는 컨트롤러에 있어야하고 뷰에 텍스트를 설정합니다 ...) 계산을 반복해야하는 경우 타이머를 사용하십시오.

그래서 비슷한 코드로 시작합니다

uint64_t interval = 1; 
uint64_t leeway = 0; 

dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue()); 
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, interval * NSEC_PER_SEC, leeway * NSEC_PER_SEC); 
dispatch_source_set_event_handler(timer, ^{ 

    // put code here... 
}); 
dispatch_resume(timer); 

장점 : 1) 낮은 CPU 처리 2) 더 잠 3) 이미 비동기. 4) 이벤트의 일정을 잡기 위해 모든 "불"을 사용할 수 있습니다. 5) "카운트"var를 사용하여 타이머를 종료 할시기를 결정하십시오.이 경우 dispatch_cancel과 비슷한 것을 사용하여 타이머를 종료하십시오. 타이머 ")

+0

안녕하세요, @ replyconti, 답장을 보내 주셔서 감사합니다 :) 글쎄, 내가 언급 한대로 그 계산을 컨트롤러에서 할 수 있습니다. 그러나 계산은 custom_view 클래스에 저장된 값으로 만들어집니다. 예 : custom_view는 PROPERTY [집/건물]을 나타내고 custom_view의 값은 속성의 RATE입니다. 그래서 값은 custom_view의 속성/변수를 기반으로합니다. 따라서 필자는 항상 custom_view의 인스턴스를 만들고 값이있는 모든 새 custom_view를 초기화합니다. –

+0

뷰는 데이터를 저장하거나 계산해서는 안됩니다. 데이터는 모델 또는 제어 계층의 어딘가에서 모델 및 계산에 있어야합니다 (구현 세부 사항에 따라 다름). – bbum

+0

ok @bbum, yes 나는 계산을 위해 뷰를 사용하지 않겠다./데이터를 담고있는 데이터는 이번에 할 것이고, 사람들이 강조하는 것처럼 변경 될 것이다. 고마워요. 초보자인데, 내가 언급해야 할 것은/당신이 지적한 그런 실수를 피하고 나중에 더 많은 구조화 된 구현을하는 법을 배워야한다는 것입니다. –