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 に答える