2010-10-20 3 views
1

Я звоню в applicationDidFinishLaunching:Будет ли этот код утечкой памяти?

[self performSelectorInBackground:@selector(performReachabilityCheck) withObject:nil];

Вот performReachabilityCheck

-(void)performReachabilityCheck{ 
    internetReach = [[Reachability reachabilityForInternetConnection] retain]; 
    [internetReach startNotifer]; 
    [self updateInterfaceWithReachability: internetReach]; 
} 

Мне нужно создать пул авто-релиз ли? Если да, то как я могу это сделать в этом контексте?

ОБНОВЛЕНИЕ: Правильный ли вариант реализации пула автоматического выпуска?

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    [self performSelectorInBackground:@selector(performReachabilityCheck) withObject:nil]; 
    [pool release]; pool = nil; 

ответ

1

Да, в любое время, когда вы выполняете селектор на фоновом потоке, его необходимо обернуть в AutoreleasePool. Используемые классы могут создавать объекты с автореализацией. Если вы запустите это при подключении к отладчику, вы увидите много сообщений о том, что «нет пула авторесурсов на месте, просто утечка».

+0

проверить мой обновленный код. Я правильно создаю пул авто-релизов? –

+1

@Sheehan, вы должны поместить NSAutoreleasePool в свой метод performReachabilityCheck (тот, который работает в фоновом режиме) – Vladimir

Смежные вопросы