Iphone - Смущен утечками в моей NSOperation - PullRequest
0 голосов
/ 25 февраля 2010

Мое приложение имеет класс NSOperation под названием ServerRequest, который обрабатывает сетевые задачи. Согласно инструментам, он протекает как сумасшедший. Кроме того, инструменты говорят, что код, который строит запрос, протекает, хотя это не NSOperation. Но я последовал совету Apple по настройке пула автоматического выпуска, поэтому не понимаю, в чем может быть дело. Кто-нибудь может помочь?

Часть моего кода ниже:

-(void) main {
 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 self.data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];  // lots of leakage here
 [self postResult]; // leakage here too
 [pool release];
}

и метод postResult (который не протекает):

-(void) postResult {
// error handling code here

 if (![self isCancelled])
 {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  NSMutableDictionary *resultDictionary = [[NSMutableDictionary alloc]init];
  if (self.data!=nil)
   [resultDictionary setObject:self.data forKey:kDataKey];
  if (self.response!=nil)
   [resultDictionary setObject:self.response forKey:kResponseKey];
  if (self.error!=nil)
   [resultDictionary setObject:self.error forKey:kErrorKey];
  NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
  NSNotification *notification = [NSNotification notificationWithName: kDownloadCompleteName object: self userInfo: resultDictionary];
  [resultDictionary release];
  [center postNotification: notification];

  [pool drain];
 }
}

Наконец, dealloc:

- (void) dealloc {
 self.request = nil;
 self.data = nil;
 self.mutableData = nil;
 if (!self.error)
  self.error = nil;
 if (!self.response)
  self.response = nil;
 [super dealloc];
}

1 Ответ

0 голосов
/ 26 февраля 2010

Некоторые рекомендуют избегать подхода сеттера self.var = nil для освобождения переменных в деконструкторе -dealloc.

Вы пробовали старый проверенный подход [var release], var = nil?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...