0

昨年の夏に作成した UDP タイプのソケットは問題なく動作し、プロジェクト ファイルを開いても問題なく動作します。ただし、.h/.m ファイルを ARC を含む新しいプロジェクトにインポートしました。

ARC は次のコマンド (if ステートメントで使用される) を好みません。

CFSocketSendData(WOLsocket, 
                   address,
                   Data,
                   0) < 0)

エラーで:

目的の C 型ポインター 'CFDataRef' の暗黙的な変換 (別名 'const struct__CFData' は ARC では許可されていません

WOLsocket で 1 回、アドレスで 1 回、エラーが繰り返されます。

ここで、WOLsocket は次のように作成されます。

WOLsocket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_DGRAM, IPPROTO_UDP, 0, NULL, NULL);
int desc = -1;
desc = CFSocketGetNative(WOLsocket);
int yes = 1;
setsockopt (desc, SOL_SOCKET, SO_BROADCAST, (char *)&yes, sizeof (yes))

(エラーチェックコードがあります。これが基本です!)

アドレスはそのように作成されます。

memset(&addr, 0, sizeof(addr));
    addr.sin_len = sizeof(addr);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(PORT); //port
    addr.sin_addr.s_addr = ad;
    address = [NSData dataWithBytes: &addr length: sizeof(addr)];

なぜこれが起こっているのか、私は非常に混乱しています。他のすべての ARC エラーは、'dealloc, release' ステートメントを失うことで解決されたようです!

私の質問は、CFData の使用について ARC が文句を言わないようにするにはどうすればよいですか? (どのような変更を加える必要がありますか?)

ありがとう、

アレックス

4

1 に答える 1

0

ARCとブリッジキャストに対する質問と選択された回答の両方が、あなたの質問にかなりよく答えるはずです.

于 2012-04-05T02:36:55.623 に答える