1

テーブルビューと構造について質問したいのですが@synchronizeddidSelectRowAtIndexPathユーザーがテーブルセルをタップし続けても、内部のコードを一度実行する必要があります...

ゲームのメニューとして使用するテーブルがあります。で実装されているロジックへの同期アクセスを提供したいと思いますdidSelectRowAtIndexPath

私は次のコードを書きました:

//condition = YES in init code

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        @synchronized( self)
        {
            if( !condition)
            {
                NSLog(@"multiple execution is not allowed...");
                return;
            }
            condition = NO;
            ...
            //code
            ...
        }
    }

私はそれをios4.3.4を使用してipone3gsでテストし、動作しました(テストを行い、動作は期待どおりです)が、クライアントはios3.xをインストールした彼の3gでテストしました。動作しないようです。

(コードをで囲むことで)GCDを使用することを考えましたdispatch_once()が、iOS4.x以降でサポートされています。

@synchronizedクライアントの電話で機能しない理由について何か洞察があります か?

ありがとう!

4

1 に答える 1

0

@synchronizedここでは必要ありません。

  • デリゲート呼び出しがメインスレッドから行われることを期待できます(呼び出さないと仮定します)。
  • dispatch_onceここでは珍しい選択のようです。それが良いと確信しているならpthread_once、iOS3を試してみてください。それは可変のグローバル状態を使用して動作するので奇妙です。IOW、「私は1つのテーブルだけを作りたい」。
  • BOOLのテストは高速です。

私の推測?テーブルが削除され(ビューのアンロード)、リロード時に再作成できない場合があります。

于 2011-10-22T18:33:14.437 に答える