Я использую класс Reachabiliry от Apple в моем недуговом проекте. И когда я запускаю его с помощью инструментов для поиска утечек памяти, он ссылается на метод 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;
}
Просочившиеся объекты достижимы и возвращаются. Я понимаю, что SCNetworkReachabilityCreateWithAddress создает новый экземпляр, и я должен CFRelease, но это происходит прямо в dealloc!
- (void)dealloc
{
[self stopNotifier];
if (reachabilityRef != NULL)
{
CFRelease(reachabilityRef);
}
[super dealloc];
}
Так что я могу сделать, чтобы избежать утечки памяти здесь?
UPD: Возможно, проблема заключается в том, как можно получить доступность? Я использую этот метод:
+ (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 reachabilityForInternetConnection] startNotifier];
И не назначить его на любой объект, просто использовать эту линию. Я пытался изменить это вызывает что-то вроде:
Reachability *reachability = [[Reachability reachabilityForInternetConnection] autorelease];
[reachability startNotifier];
Но после того, как этот анализатор сказал мне «слишком много autorelease».
и анализатор и дуга также полагаются на соглашения об именах –
Daij-Djan, не могли бы вы объяснить? – Maria
Кроме того, я только что обновил вопрос. – Maria