Использование NSThread для решения проблемы ожидания изображения с URL на iPhone - PullRequest
0 голосов
/ 10 мая 2010

Итак, у меня есть следующий код в методе, для которого я хочу установить изображение UIImageView для одного из онлайн-источника:

[NSThread detachNewThreadSelector:@selector(loadImage) toTarget:self withObject:nil];

Тогда в методе, вызванном потоком, у меня есть это:

- (void) loadImage
{
    NSURL *url = [NSURL URLWithString:logoPath]; // logoPath is an NSString with path details
    NSData *data = [NSData dataWithContentsOfURL:url];

    logoImage.image = [UIImage imageWithData:data];
}

Это прекрасно работает, однако в консоли отладчика я получаю много предупреждений в виде:

2010-05-10 14: 30: 14.052 ProjectTitle [2930: 633f] *** _NSAutoreleaseNoPool (): объект 0x169d30 класса NSHTTPURLResponse автоматически выпущен без пула на месте - просто подтекает

Это происходит много раз каждый раз, когда я вызываю новый поток, а затем, в конечном итоге, без шаблона, после вызова нескольких из этих потоков я получаю классическую ошибку времени выполнения 'EXC_BAD_ACCESS'.

Я понимаю, что это происходит, потому что я не сохраняю объект, но как я могу решить это с помощью кода в loadImage, показанном выше?

Спасибо

1 Ответ

1 голос
/ 10 мая 2010

Вам необходимо создать пул автоматического выпуска для потока, в противном случае объекты, которые вы явно не освободили, не будут освобождены. См. Apple Docs , в которой, в сущности, сказано следующее:

- (void)myThreadMainRoutine
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // Top-level pool

  // Do thread work here.

  [pool release];  // Release the objects in the pool.
}
...