私は新しいスレッドを生成するために[NSThread detachNewThreadSelector]を使用していますが、コンソールに「autoreleased no pool in place」エラーが表示されています。私はあなたが自動リリースプールを作成しなければこれが起こることがあることを知っていますが、事は、私はそれを作成しています。私は同じアプリケーションの他の部分で同様のコードを使用し、これらのエラーを取得しないでください。iOSは自動リースされ、プールはありませんが、ARPを作成しています!
ここ関連するコードである:
- (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オブジェクトを作成し、それらのすべてが同様に報告します。
役立つヒントやポインタに感謝します。
ありがとうございます!
カール - 私はあなたの時間を無駄にすることをお詫び申し上げます。あなたは正しいのです。それは、私がdetachNewThreadSelectorを使うアプリケーションの他の部分でどうやってやっているかです。ちょうど木の森を見ることができませんでした。私は間違ったパターンに固定されていて、他のコードを見たことがないので、同じであると確信していました。早速の対応、ありがとうございました! – Jordan