そのため、[NSThread detachNewThreadSelector] を使用して新しいスレッドを生成すると、コンソールに「プールが配置されていない状態で自動解放されました」というエラーが表示されます。自動解放プールの作成に失敗すると、これが発生する可能性があることはわかっていますが、問題は、私が作成していることです。同じアプリの他の部分で同様のコードを使用していますが、これらのエラーは発生しません。
関連するコードは次のとおりです。
- (void) startThread:(NSString*)strURL
{
// start new thread to load image
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[NSThread detachNewThreadSelector:@selector(loadImageFromURL:) toTarget:self withObject:strURL];
[pool release];
}
- (void) loadImageFromURL:(NSString*)strURL
{
NSNumber* nn = [NSNumber numberWithInt:self.tag];
NSLog(@"loadURL: Tag number == %i", [nn intValue]);
// other code here actually does the work
}
さて、(リモート サーバーからイメージをロードする) 実際に作業を行う loadImageFromURL にさらに多くのコードがありましたが、そのコードがなくても問題が明らかになるので、削除しました (私が持っていると思わないように)何もしない無意味なスレッド!)。問題を示すコードを 1 行だけ残しました。自動解放された NSNumber オブジェクトを作成します。
このコードを実行すると、コンソールに次のように報告されます。
__NSAutoreleaseNoPool(): Object 0x535c0e0 of class NSCFNumber autoreleased with no pool in place - just leaking
もちろん、実際のコードは他の多くの AR オブジェクトを作成し、それらすべても同様に報告されます。
役に立つかもしれないヒントや指針に感謝します!
ありがとう!