私は非アークプロジェクトでappleのReachabiliryクラスを使用します。また、メモリリークを検出するために計測器を使用して実行すると、Reachabilityメソッドが参照されます。ここに問題があります:Appleの到達可能性メモリリーク
+ (instancetype)reachabilityWithAddress:(const struct sockaddr_in *)hostAddress;
{
SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)hostAddress);
WReachability* returnValue = NULL;
if (reachability != NULL)
{
returnValue = [[self alloc] init];
if (returnValue != NULL)
{
returnValue->reachabilityRef = reachability;
returnValue->localWiFiRef = NO;
}
}
return returnValue;
}
リークされたオブジェクトは到達可能性とreturnValueです。 私はSCNetworkReachabilityCreateWithAddressが新しいインスタンスを作成することを理解しています。私はCFリリースする必要がありますが、deallocで正しく発生します。
- (void)dealloc
{
[self stopNotifier];
if (reachabilityRef != NULL)
{
CFRelease(reachabilityRef);
}
[super dealloc];
}
ここでメモリリークを回避するにはどうすればよいですか?
UPD: おそらく、到達可能性がどのように呼び出されるのでしょうか?私は、このメソッドを使用します。
[[Reachability reachabilityForInternetConnection] startNotifier];
そして、ちょうどこのラインを使用し、任意のオブジェクトに割り当てないでください:
+ (instancetype)reachabilityForInternetConnection;
{
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
return [self reachabilityWithAddress:&zeroAddress];
}
は、その後私はこのような到達可能性と呼ばれます。私はこれを変更しようとした は次のように呼び出します:
Reachability *reachability = [[Reachability reachabilityForInternetConnection] autorelease];
[reachability startNotifier];
しかし、このアナライザは、「あまりにも多くの自動リリース」私に言った後。
とアナライザ&アークも命名規則に頼っています –
Daij-Djan、説明できますか? – Maria
また、私はちょうど質問を更新しました。 – Maria