Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > NSThread

NSThreadでスレッド処理を行う

サンプル画像

タイマー処理と同様に利用できるスレッドの処理です。NSTimerではヒゲがのびたサンプルでしたので眉毛の濃くなるサンプルにしてみます。ただ、どうやらThread処理は 推奨されておらず、dispatch_queueを使用するべきのようです。

NSThreadのクラス階層


NSObject

NSThread

参考:Foundation Framework Reference NSThread Class Reference
参考:How to implement NSThread to constantly perform the function in background in iPhone SDK
参考:performSelector:onThread: in Swift?

やってみた

以下のサンプルでは一秒後にeyeblowAlphaUp関数を呼びます


    let delay = 1.0 * Double(NSEC_PER_SEC)
    var time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
    dispatch_after(time, dispatch_get_main_queue(), {
        NSThread.detachNewThreadSelector(Selector("eyeblowAlphaUp:"), toTarget:self,withObject: nil);
    })

    func eyeblowAlphaUp(obj:AnyObject){
        println("眉毛が濃くなりました")
    }

繰り返し利用したい場合、は関数内にあらためてdispatch_timeします


    let delay = 1.0 * Double(NSEC_PER_SEC)
    var time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
    dispatch_after(time, dispatch_get_main_queue(), {
        NSThread.detachNewThreadSelector(Selector("eyeblowAlphaUp:"), toTarget:self,withObject: nil);
    })

    func eyeblowAlphaUp(obj:AnyObject){
        println("眉毛が濃くなりました")
        let delay = 1.0 * Double(NSEC_PER_SEC)
        var time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
        dispatch_after(time, dispatch_get_main_queue(), {
            NSThread.detachNewThreadSelector(Selector("eyeblowAlphaUp:"), toTarget:self,withObject: nil);
        })
    }

どうしてもNSThreadでタイマーのような処理をしたい場合はCFRunLoopRefを利用します。トライしましたが時間内にうまくいかず、、、こちらの記事をご確認ください。

カスタマイズ

以下のようにボタンのクリックイベントを模倣させることもできます


  let delay = 1.0 * Double(NSEC_PER_SEC)
    var time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
    dispatch_after(time, dispatch_get_main_queue(), {
       NSThread.detachNewThreadSelector(Selector("btn_click:"), toTarget:self, withObject: "button")
    })

    //ボタンがクリックされると呼ばれます
    func btn_click(sender: UIButton){
        println("button is clcked!")
    }

追記

自分でコーディングしていると、dispatch_afterでNSThreadの処理全般を書いていたのですが、NSThreadはもっと賢こかったので、 補足説明です。

参考:GCD (Grand Central Dispatch) – Dispatch Queue でマルチスレッドプログラミング

dispatch_async:スレッドで非同期実行

dispatch_sync:スレッドで同期実行

dispatch_after:一定時間後に実行

dispatch_group_***:まとめて実行

dispatch_once:一度だけのdispatch_sync。名前が違うだけかな

まとめ

NSTimerをつかわないでNSThreadでももっとスマートな方法がある気がするのですが、、、わからなかったのでこの方法で共有です。NSTimerでのループ処理は過去記事のこちらをご確認ください。

↓こんな記事もありますよ!

Backslashを忘れない

ショートカットキーで(\)を入力するには「optionキーを押しながら、¥キーを押す」で可能なのですが、 なにかと、あれ、、、なんだったっけ?と忘れる事が多かったので、バックスラッシュ拡大表示。

大阪都構想の橋下さんの鼻に誠意をもって顔認識処理で画鋲を刺す

先日大阪都構想でニュースがざわついておりましたが、 そこで自分が思っていたこと、なぜ鼻ピンしたのかを顔認識サンプルと誠意を込めて書き記してまいります。(※選挙ポスターに画鋲を刺す事や、そもそも「他人様」の画像を変更することがタブーな事を理解しつつの投稿です。問題がないかの問い合わせメールを送る予定です。画像はWikipediaからの引用です)

Facebook SDKを試してみる(調査)

先日ひょんなところからFacebookSDKの事を教えていただき、興味が足裏からフツフツと湧き出てまいりましたので本日調査してみます。
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!