0

servin.com Web サイトから次のコードを取得しました。コードは機能しますが、Instruments はメモリ リークを報告します。コードに alloc、retain、copy が表示されないため、このメモリ リークを解決する方法がわかりません。Instruments のコードと結果は以下のとおりです。どんな助けでも大歓迎です。

// Part 1 - Create Internet socket addr of zero
struct sockaddr_in zeroAddr;
bzero(&zeroAddr, sizeof(zeroAddr));
zeroAddr.sin_len = sizeof(zeroAddr);
zeroAddr.sin_family = AF_INET;

// Part 2- Create target in format need by SCNetwork
SCNetworkReachabilityRef target = 
SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *) &zeroAddr);

// Part 3 - Get the flags
SCNetworkReachabilityFlags flags;
SCNetworkReachabilityGetFlags(target, &flags);

// Part 4 - Create output
NSString *sNetworkReachable;
if (flags & kSCNetworkFlagsReachable)
    sNetworkReachable = @"YES";
else
    sNetworkReachable = @"NO";

NSString *sCellNetwork;
if (flags & kSCNetworkReachabilityFlagsIsWWAN)
    sCellNetwork = @"YES";
else
    sCellNetwork = @"NO";


NSLog (@"Network Reachable: %@", sNetworkReachable);
NSLog (@"Cell Network: %@", sCellNetwork);

楽器からの結果...

リークされたオブジェクト - # - アドレス - サイズ - 責任ライブラリ - 責任フレーム

Malloc 16 バイト - 1 - 0x5141d50 - 16 バイト - SystemConfiguration - SCNetworkReachabilityCreateWithAddress

SCNetworkReachability - 1 - 0x51347b0 - 288 バイト - SystemConfiguration - SCNetworkReachabilityCreateWithAddress

4

2 に答える 2

2

漏れはそこです。すべてのコードの後、への参照を解放する必要がありますtarget。上のアップルのドキュメントからSCNetworkReachabilityCreateWithAddress

戻り値

新しい不変の到達可能性参照。戻り値を解放する必要があります。

CFRelease(target)関数を使用して呼び出しを排除してみてください。関数呼び出し間で保持する参照が必要な場合は、クラスのインスタンス変数にします。

于 2012-06-13T18:41:40.550 に答える
0

SCNetworkReachabilityCreateWithAddresssのドキュメントを読んだら

戻り値

新しい不変の到達可能性参照。戻り値を解放する必要があります。

于 2012-06-13T18:40:40.040 に答える