iPhoneで小さなコードを実行しているとうまくいきません。
基本的に、ボタンを押すだけで、 が呼び出され、バックグラウンド スレッドでメソッドがrunTest
実行されます。test
そのため、自動解放プールを作成しました。
以下のコードを実行すると、コンソールに次のような美しいメッセージが表示されます。
2010-09-07 11:45:15.527 test[1312:207] *** -[CFString release]: message sent to deallocated instance 0x3d52ba0
-(void) test {
NSAutoreleasePool *apool = [[NSAutoreleasePool alloc] init];
NSString *xml = [[NSString alloc] initWithFormat:@"<%@>", @"msg"];
NSLog(@"%@\n",xml);
[xml release];
[apool release]; // <-- this line throws the error msg
}
- (IBAction) runTest: (id)sender
{
[self performSelectorInBackground:@selector(test) withObject:nil];
}
test
バックグラウンド スレッド (自動解放プールなし) で実行せず、 を呼び出すだけ[self test]
で、コードは正常に 動作することがわかりました。
だから、問題はスレッド+自動解放プールにあると思いますが、何が間違っていますか? どうすれば解決できますか?
PS私はNSZombie
フラグを有効にしています。