0

私は Apple の WiTap サンプルのほとんどをたどることができますが、send メソッドのこのビットにはちょっと困惑しています:

- (void) send:(const uint8_t)message
{
if (_outStream && [_outStream hasSpaceAvailable])
    if([_outStream write:(const uint8_t *)&message maxLength:sizeof(const uint8_t)] == -1)
        [self _showAlert:@"Failed sending data to peer"];
 }

 - (void) activateView:(TapView*)view
{
    NSLog(@"ACTIVATE TAG: %d", [view tag]); 
    //[self send:[view tag] | 0x80];
    [self send:[view tag]];
 }

 - (void) deactivateView:(TapView*)view
 {
    NSLog(@"DEACTIVATE TAG: %d", [view tag]); 
    //[self send:[view tag] & 0x7f];
    [self send:[view tag]];

 }

send: 引数を、1 ~ 9 の番号が付けられたビューのタグだけに変更したことに注意してください。元々、コードにはビット単位の AND および OR 調整がありました。

なぜ?

send メソッドには が必要であるという事実がuint8_tわかりましたが、それがビット単位のものがある理由ですか? NSInteger を unint8_t に変換するには?

上記の変更でコードが機能しません。正常にログに記録され、視覚的にクライアントは正しく機能しますが、メッセージはクライアントからクライアントへ正しく送受信されていません。

誰かがビット単位のものが何をしているのかを短い言葉で説明できますか? それとも私は正しいですか?

ありがとう!これはSOへの私の最初の質問ですので、親切にしてください.


返信ありがとうございます。私はまだ少し困惑しています。それを得る?

基本的に、なぜですか?

これは、識別子を渡すためのマニアックな方法ですか? これらの各ビューにはタグ # があります。それを渡して、ビュー クラスから状態 (上/下) を切り替えてみませんか?

これは、「これを書いた人がこのようにした」という単なるケースですか、それとも、これがコードを構造化する方法でもあるという点で、パズルの重要なピースが欠けているのですか。

タグ # を渡したいだけで、そのタグに、明確に読みやすい関数などで何をするかを決定させますtoggleUpOrDownState

このビットごとのものは、必要でない限り、私はいつも私を愚かに感じさせます. : )

4

3 に答える 3

3

基本的に、[view tag] | 0x80その値の上位ビットを設定し (00010011 は 10010011 になります)、それ[view tag] & 0x7fを削除します (10010011 -> 00010011)。

[AppController stream:handleEvent:]メソッドを見てみましょう。次のコードが表示されます。

        //We received a remote tap update, forward it to the appropriate view
    if(b & 0x80)
        [(TapView*)[_window viewWithTag:b & 0x7f] touchDown:YES];
    else
        [(TapView*)[_window viewWithTag:b] touchUp:YES];

したがって、ストリームの受信者はその上位ビットをチェックしています。

于 2008-11-22T16:29:03.193 に答える
0

その理由は、上位ビットが1つのピアから別のピアに渡されるデータの別の部分であるためだと思います。メッセージがタップの「開始」に対するものか、タップの「終了」に対するものかを指定します。

そのビットに基づいて、レシーバーはタップビューをアクティブにするか非アクティブにします。

つまり、本質的には、2つの情報をその単一の符号なし整数に入れています。つまり、正方形がタップされ(下位ビット)、開始または終了のタッチ(上位ビット)でした。

于 2008-12-02T05:28:11.997 に答える
0

メッセージがドロップされたり、別の順序で到着したりする可能性があると思います。そのため、タップダウンかタップアップかを言わないと、トグルが外れる可能性があります。

于 2008-12-19T06:36:03.037 に答える