iOS Objective-C コードで Bonjour ( および の関数を使用)<netinet/in.h>
を使用してホストに接続するときに、次のコードを使用してサーバーのホスト名を検索しています。<arpa/inet.h>
私が使用しているコード (以下に示す) は Big Nerd Ranch iOS プログラミング ブックからのものですが、もともと ARC を念頭に置いて書かれたものではありません。
- (NSString *)serverHostName
{
NSArray *addresses = [desktopServer addresses];
NSData *firstAddress = [addresses objectAtIndex:0];
// the binary data in the NSData object is a sockaddr_in (which represents a network host)
const struct sockaddr_in *addy = [firstAddress bytes];
// convert 4-byte IP address in network byte order to a C string of the format xxx.xxx.xxx.xxx
char *ipAddress = inet_ntoa(addy->sin_addr);
// convert the 2-byte port number from network to host byte order
UInt16 port = ntohs(addy->sin_port);
return [NSString stringWithFormat:@"%s:%u", ipAddress, port];
}
ライン上の EXC_BAD_ACCESS でクラッシュすることがあり、それが破棄されるのが早すぎるchar *ipAddress = inet_ntoa(addy->sin_addr);
と思われます。これを防ぐためにまたはメソッドのaddy
使用を調べてみましたが、違いがないか、より多くの問題が発生しているようです。CFBridgingRetain()
CFRetain()
これを鎮圧するために何を探すべきかについての提案はありますか?