iPhoneでNSThreadのスレッドを使う際にうっかりミスった点をメモしておきます。
割と常識のようですが、特にUIImageViewのほうはエラーも出ないので初めてだと焦りますね;;
autoreleaseに注意
何も考えずにスレッド用の関数内でautoreleaseが呼ばれると、
*** NSAutoReleaseNoPool(): Object 0x********* of class NSConreteData autoreleased with no pool in place ....
といった感じのエラーが出てしまいます。
お決まりパターンとして、スレッドの最初で
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
しておいて、スレッド終了時に [pool drain]
すればとりあえず問題なさそうです。
別スレッドからUIImageViewのimageを更新しても、表示されない
別スレッドで
imageView.image = [UIImage imageNamed:@"Hoge.png"];
のような処理を実行しても、表示されません。
UIImageViewのimageを設定して表示する処理は、メインスレッドでないとダメみたいです。
メインスレッドで実行するには、実行する処理を関数にまとめた上、
[delegate performSelectorOnMainThread:@selector(theProcess:) withObject:nil waitUntilDone:YES];
のようにperformSelectorOnMainThread
を使えばOKです。