0

所以我在一个方法中有以下代码,我想将 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(): NSHTTPURLResponse 类的对象 0x169d30 自动释放,没有适当的池 - 只是泄漏

每次我调用新线程时都会发生很多次,然后最终,在没有模式的情况下,在调用其中一些线程后,我得到了经典的“EXC_BAD_ACCESS”运行时错误。

我知道发生这种情况是因为我没有保留对象,但是如何使用上面显示的“loadImage”中的代码解决这个问题?

谢谢

4

1 回答 1

1

您需要为线程创建一个自动释放池,否则您未明确释放的对象将不会被释放。请参阅Apple Docs,它基本上告诉您执行以下操作:

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

  // Do thread work here.

  [pool release];  // Release the objects in the pool.
}
于 2010-05-10T13:50:44.847 回答