Mobile,Jasmine,JavaScript,Java,テスト駆動開発等)など扱っています。マルチスレッド処理スポンサードリンク「iOS(Xcode6)におけるマルチスレッド処理の実装方法その1」に引き続きiOSに置けるマルチスレッド処理の第二回目のエントリーとなります。本エントリーではObjective-CにおけるNSThreadクラスの簡単な実装サンプルとその説明を記載させていただきます。利用しているXcodeは6.1です。NSThreadクラスを利用したマルチスレッド処理NSThreadクラスを利用したスレッド作成の説明をいただきます。スレッド作成方法として2通りの方法が存在します。NSThreadのdetachNewThreadSelectorメソッドを利用する方法NSThreadのサブクラスを作成する方法NSThreadのdetachNewThreadSelectorメソッドを利用する方法detachNewThreadSelector呼び出し時にオブジェクトとスレッドで実行したいメソッド、及びそのメソッドの引数を指定します。detachNewThreadSelectorの利用例1XCTestCaseのテストメソッドからdetachNewThreadSelectorを利用したスレッド起動を行う例は以下の通りです。i);sleep(1);}}}@endtestNSThread1メソッドにNSNumberのローカル変数roopNumを値10で宣言し、detachNewThreadSelectorのtoTargetはself、メソッドはthreadFuncA、withObject(引数)はroopNumを指定して呼び出しています。よってThreadSampleObjective_CTestクラスのthreadFuncAメソッドにroopNumが引数として指定されスレッドが起動されます。roopNumがNSNumberである理由はオブジェクト型でなければthreadFuncAの引数にできないからです。あとスレッドを起動した後のfor文は起動したスレッドが終わる前にメインスレッドが終了するのを防ぐためです。(メインスレッドが終了するとそれ以外のスレッドは強制的に停止させられます。)実行した時のログ(NSLogのみ抜粋)は以下のようになります。起動したスレッドのログ[8345:772076]の772076がスレッドのIDとなります。メインスレッドのIDは772029となっています。9detachNewThreadSelectorの利用例2代わり映えしないですが、同じ処理を行うスレッドをもう1つ起動するようにしてみました。i);sleep(2);}}ログは以下のようになりました。メインスレッドのIDは775692、作成して2スレッドのIDは775735と775736となっていることが分かります。9NSThreadのサブクラスを使った方法NSThreadクラスのサブクラスを作成し、mainメソッドをオーバーライドします。別スレッドとして実行したい処理はmainメソッド内で実装します。detachNewThreadSelectorメソッドを使ったスレッド起動とは異なり、NSThreadクラスのサブクラスをインスタンス化した後、そのインスタンスを使ってスレッドを起動するので、様々な状態をインスタンスにセットした後に実行できます。detachNewThreadSelectorメソッドでも別スレッドとして実行されるメソッドの引数をNSDictionaryにすれば同じ様なことが実現可能ではありますが、スレッド実行中の状態を確認したい場合は、NSThreadのサブクラスを利用する必要があります。処理自体はdetachNewThreadSelectorの利用例とほぼ同じですが、テストメソッドで出力するNSLogに起動したスレッドが動作しているかどうかの情報を追加しています。NSThreadEx.hは以下の通りです。roopNum;@endNSThreadEx.mは以下の通りです。//NSThreadのmainをまずは呼び出す。//ここに別スレッドで実行したい処理を記載する。{//NSThreadのmainをまずは呼び出す。{//ここに別スレッドで実行したい処理を記載する。i);sleep(1);}}}@endスレッドを起動するテストメソッドは以下の通りです。isFinished);sleep(2);}}実行した時のログ(NSLogのみ抜粋)は以下のようになります。起動したスレッドのIDが863290、テストメソッドのを実行しているスレッドのスレッドIDが863222となっています。nSThreadEx.isFinished=YESこのログで注目すべきポイントはnSThreadEx.isFinishedが途中からYESに変わっていることです。21:31:07.448となっています。今回の例ではNSThreadExクラスにプロパティは1つでしたが、もっとプロパティが増え場合にはNSThreadのサブクラスを利用したスレッドの作成の方が、そのプロパティを簡単に確認することができるため便利であると言えます。Layout」ですが、使いこなせるようになるのは骨が折れます。templateでStoryboardを利用する。記事を読むXcode&Objective-Cの文字列処理をユニットテスト(XCTestフレームワーク)で確認する。記事を読むXcode&Objective-Cのまとめエントリーエントリーもまずまず揃ってきたので、まとめのエントリーを作成しておこうと思います。記事を読むObjective-C(Xcode)でイメージのアニメーション表示を行う。「Xcode5でイメージ(画像)を表示&操作する」では画面に表示されているイメージをタップし記事を読むXcodeの使い方[ツールバー]Xcode5(iOS7対応バージョンの統合開発)の「ツールバー」の使い方のエントリーとなります。Dispatch)を利用したiOSのマルチスレッ記事を読むXcodeの使い方[エディタエリアの環境設定]「Xcodeの使い方」に引き続き「Xcodeの使い方[エディタエリアの環境設定]」となります。コメントをキャンセルメールアドレスが公開されることはありません。ENTRY動画で英語を学習できるiOSの無料アプリCapTubeをリリースいたしました。個人では初となるiOSアプリをリリースいたしました。前回はSwiftの概要をザックリと説明させていただきました。Mobile,Jasmine,JavaScript,Java,テスト駆動開発等)など扱っています。