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でのループ処理は過去記事のこちらをご確認ください。
↓こんな記事もありますよ!
![]() | UITextViewやらで縦書きができないか検証「文字の縦書き」をやってみたいのですが、どうもUITextView等には設定が無いとのことです。 調べていると、本当にない?のかな。少し調査して作れそうなもんであればつくってみれたら、、、との気持ちで進めてみます。 |
![]() | UITableViewCellをプログラムで動的に作成するUITableViewをStoryboardで作成する方法は結構ありますが、プログラムだけで作成するサンプルが少なかったので共有します。 |
![]() | AppleWatchでNotificationを受け取る。バイブでブルブル通知する。どうやら現状はAppleWatchのバイブレーションパターンをカスタマイズできないようなのですが、Notificationを受け取る際に ブルブルする状態のようです。つきましては、NotificationをApp側で設定、AppleWatch側で受け取ってブルブルするサンプルを記載していきます。 |
Tweet
![]() |
|||
|