Tech Racho エンジニアの「?」を「!」に。
  • 開発

iOS開発でNSThreadのスレッドを使うときの注意点

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です。


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。