2
  • 私のプログラムは動作します
    1. CocoaAsyncSocket (TCP) を使用してバイトを送信する
    2. 応答を取得 (バイトデータ)
    3. バイト配列を有効なデータに変更します (int / nsstring / etc)
    4. ラベルのテキストを変更します(ステップ3)

NSLogを入れて見ました。ログはほぼ高速に表示され、関数 (ラベル テキストの変更) は適切に実行されます。ただし、関数が呼び出されてから約 4 ~ 5 秒後に、シミュレーターでラベルのテキストが変更されていることがわかります。

私の最初の方法はこれです

  • バイト配列を取得 - nsdata に分割 - nsstring に変更 - 配列を入力 - 文字列を取得 - サブ文字列を追加 (「000%」や「000 秒」など) - ラベル テキストを変更

そして2つ目は

  • バイト配列の取得 - 分割 - nsstring への変更 - 関数の呼び出し (部分文字列の追加 - ラベル テキストの変更)

うーん... どうすれば変化速度を上げることができますか?

4

2 に答える 2

5

ラベル テキストの変更は「ほぼ瞬時に」発生するはずであり、これに時間がかかる場合は通常、メイン スレッドでラベル テキストを更新していないことが原因です。これは UIKit オブジェクトであるため、メイン スレッドでのみ変更する必要があります。

使用する:

dispatch_async(dispatch_get_main_queue(), ^{
    self.label.text = myString;
});
于 2013-02-05T04:43:04.970 に答える
1

ほぼ同じ遅延でカレンダーからイベントを取得するときに、同様の問題が発生しました。Inafziger が提案したことがうまくいかない場合はperformSelectorOnMainThread:、「ステップ 3」でラベルを更新するメソッドを使用して呼び出すことをお勧めします。

[self performSelectorOnMainThread:@selector(yourMethodToUpdateLabels) withObject:nil waitUntilDone:NO];

私の状況ではうまくいきました。それが役に立てば幸い。:)

于 2013-02-05T05:00:53.783 に答える