2

CUSTOM_VIEWのCLASSを減らすためにディスパッチキューを管理します。 custom_viewインスタンスに格納されているプロパティ/変数に基づいて、custom_viewの値を計算します。が正しく電話加熱iOSの

の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); 
           } 
} 

、それを実行した後iPhoneは、いくつかの時間後にヒートアップ!! 私は何か間違っている/紛失/それを行うには最良の方法ですか?

答えて

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

こんにちは@ingconti、返信ありがとう:)まあ、あなたが言ったように、私はあなたの計算にはコントローラで行われることに同意しますが、計算はcustom_viewクラスに格納された値になります。例えば。 custom_viewはPROPERTY [HOUSE/BUILDING]を表し、custom_viewの値はプロパティのRATEです。その値はcustom_viewのプロパティ/変数に基づいています。したがって、私はいつもcustom_viewのインスタンスを作成し、値を持つすべての新しいcustom_viewを初期化します。 –

+0

ビューはデータを保持したり、計算したりしてはいけません。データは、モデルまたは計算レイヤのどこかに(実装の詳細に応じて)モデルおよび計算に含める必要があります。 – bbum

+0

ok @bbum、はい私は、今度はやっている計算やデータの保持にビューを使用しないことを好みます。ありがとう:)私は初心者で、私はあなたが指摘し、あなたが指摘したこのような間違いを避け、将来的にはより構造化された実装を行うことを学ぶべきです。 –

関連する問題