昨年の夏に作成した 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 が文句を言わないようにするにはどうすればよいですか? (どのような変更を加える必要がありますか?)
ありがとう、
アレックス