問題タブ [nsrunloop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
141 参照

objective-c - 単体テストの途中でアプリケーションが終了するのはなぜですか?

問題

単体テストを実行します。ある時点で、私は以下を使用して待機します。

NSOperationQueueが空になるようにします。私のアプリがこの行に達すると、すぐに終了します。他のテストとまったく同じ行を実行します。最近、すべてのテストが完全に機能していました。また、起動時にアプリがすぐに終了することもあります。

一体何が起こっているのですか?

0 投票する
1 に答える
1496 参照

iphone - CFRunLoopSource のループ

ここに私が現在開発しているソースファイルがあります。このクラスの背後にある考え方は、scheduleInCFRunLoop に渡されたCFRunLoopで呼び出されるターゲット オブジェクトとセレクターを含めることです。iPhoneで利用可能なすべての処理時間を消費せずに繰り返しループするには、これが必要です。完了に関するヘルプは最も役に立ちます。カスタム CFRunLoop ソースに関する役立つ情報を見つけるために 1 日中インターネットをサーフィンしましたが、このクラスを完了するのに役立つ情報はまだ見つかりません。

RunLoopContext.h

RunLoopContext.m

0 投票する
3 に答える
791 参照

iphone - ココアのNSRunLoops?

たとえば、2つのスレッドがあり、1つはメインスレッドで、もう1つはセカンダリスレッドです。メインスレッドが最も使用されていますが、(まれに)メインスレッドからの呼び出しに基づいてセカンダリスレッドに何らかの作業を実行させたい場合があります。ほとんどの場合、セカンダリスレッドはスリープする必要があります。いくつか検索した後、これを行う方法はrunLoopsを使用することであることがわかりました。だから私はアップルのドキュメントを読んでみました(http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW5)。

しかし、それは私には非常に複雑に見え、私はそこで少し苦労しています。私が説明したことを達成するためのエレガントでシンプルな方法はありますか?実行して遊ぶことができる同様のrunLoopコード例はありますか?

ありがとう

0 投票する
2 に答える
1412 参照

ios - NSRunLoop cancelPerformSelectorsWithTarget が機能しない

次のコードがありますが、期待した結果が得られません。

私は、関数が約 0 回呼び出されることを期待していました。CPU が遅い日を過ごしている場合は、おそらく 1 回です。

関数は 10 回実行されます。:( 常に。私は何を間違っていますか、どうすれば期待どおりの結果を得ることができますか?

よろしくお願いします、ニック

0 投票する
1 に答える
310 参照

objective-c - StatusItem メニューは、開いたときにメイン スレッドをブロックします。回避策

ステータス バー アイテムとして設計された Mac 用のアプリを作成しました。ただし、ユーザーがステータス バーからメニューを開くと、メインの実行ループは閉じられるまでブロックされます。このアプリはソケット上のメッセージに応答するため、メニューが開いている間は何もできないのが問題です。

別のスレッドからステータス項目を設定し、別のスレッドでソケットをスケジュールしようとしましたが、サイコロはありません。これに対処する良い方法はありますか?

アップデート:

これで解決しました。私はNetSocketソケット ラッパーを使用していましたが、その非同期性により、別のスレッドを開いて監視することが非常に困難でした。私はSmallSockets (別の Objective-C ソケット ラッパー) に切り替えました。これは同期であるため、ソケットを開いて別のスレッドで直接監視することができました。

0 投票する
3 に答える
4940 参照

iphone - セレクターまたはブロックを NSRunLoop に送信して実行する方法は?

同じスレッドが任意の時間にさまざまなアクションを実行することを保証する必要があります。最初にスレッドでライブラリを初期化する必要があります。次に、作業が完了するまでスレッドをスリープ状態にし、ユーザーの入力時にセレクターまたはブロックを渡して実行できるようにする必要があります。

初期化後に NSRunLoop をスリープするように設定するにはどうすればよいですか? その後、実行ループにウェイクアップして何かをするように通知するにはどうすればよいですか?

Threading Programming Guide for iOS を読んでみましたが、クラスをカスタム入力クラスとして設定することは避け、より軽量なものを使用したいと思いますperformSelector:onThread:

実行ループが終了しないように、タイマーを今から永久に起動するように設定できますか?

基本的に、擬似コードで必要なものは次のとおりです。

仕事をperformSelector:onThread:メッセージとして送信する場所。次のようなブロックを実行ループに送信できればさらに良いでしょ^{[someObj message]; [otherObj otherMsg];}performSelector

ありがとう!

0 投票する
2 に答える
928 参照

cocoa-touch - Runloop はシミュレーターで動作し、デバイスで失敗します

iPod Touch 第 2 世代を使用しており、写真名を使用してアセット ライブラリから写真を取得しようとしています。デバイスで復元を実行して、工場出荷時の 4.1 であることを確認しました。

私のヘッダーファイルには次のものがあります:

私のコードは次のとおりです。

...

photoFromURL の場所

これはシミュレーターでは正常に実行されますが、ランループがデバイスに返されることはありません。取得のために最初の 3 つの NSLog ステートメントを通過しましたが、4 番目のステートメントは表示されません。

助けてください。- ダン

0 投票する
1 に答える
1949 参照

objective-c - NSThread detachNewThreadSelector ???? え?

私はスレッディングプログラミングを調べていましたが、それは本当に良いと言わざるを得ません。特に、ループを実行するためにポートベースの入力ソースを構成する方法を探していました。そして、私はこのコードを見る

私はそれまですべてを理解していました。その関数は何をしているのですか?、「LaunchThreadWithPort」とは何ですか、「MyWorkerClass」は何の略ですか?

@selectorsに関する知識が少し不足していますが、それは私の主な質問ではありません。私はその機能とそこで何をしているのかについて一言も理解していませんでした。

返信してくれた人に感謝します。

0 投票する
1 に答える
1526 参照

iphone - UITableViewがドラッグされている間、performSelectorを実行できませんか?

私はUITableViewControllerそのデフォルトでを持っていますUITableView。テーブルを指でゆっくりとドラッグしてスクロールします。つまり、指でテーブルをフリックしません。テーブルが画面上を移動するたびscrollViewDidScrollに、コントローラーのメソッドが呼び出されます。私が指定したいくつかの条件が満たされると、これらの呼び出しの1つは、後で何らかのアクションをスケジュールするためにscrollViewDidScroll使用します。performSelector:withObject:afterDelay

ただし、指を離すまでアクションは実行されないことがわかりました。たとえば、afterDelayパラメータを2秒に設定したが、指を5秒間押し続けた場合、指を離してアクションを実行すると、3秒遅すぎます。指がまだ画面に当たっている間にアクション(UIを更新するため、メインスレッドで実行する必要がある)を実行できるようにする方法はありますか?

ありがとう!

0 投票する
1 に答える
927 参照

iphone - に関する二次スレッド

アプリにメインスレッドと補助スレッドがあります。誰もが知っているメインスレッドはUIによって使用されています。セカンダリスレッドを使用して、ビューのバックグラウンドロードを実行します。私はダミーコントローラーと呼ぶメインコントローラーを持っています。そこから、ランドスケープモードのメインコントローラーを呼び出します。

つまり、基本的に私がしなければならないのは、ダミーコントローラーを回転させるときに、メインのランドスケープコントローラーをロードできるようにしたいということです。

ダミーからメインに回転すると、すべて正常に動作します。メインにはロードする一連の子コントローラーがあるので、そのプロセスをセカンダリスレッドに配置し、ロードするまでにローダー画面を表示します。

ダミーは通常のビューコントローラーで、メインはモーダルビューコントローラーです。

今問題。

ユーザーがダミー->メインから回転しようとしている場合、rotateメソッドはメインビューコントローラーの初期化を開始します。しかし、何らかの理由で、ユーザーは気が変わってメインから回転して戻ります->ダミーが理想的です。UIスレッド(メインの読み取り)が無料であるため、移行はスムーズになります。何が起こるかというと、UIが回転して戻ります。ただし、メインコントローラーのセカンダリスレッドはまだオンになっているため、メインスレッドによってメインコントローラーでdismissモーダルコントローラーが呼び出された後でも、willRotate関数を呼び出すと。

自分でクリーンアップする必要があるため、セカンダリスレッドを単純に強制終了することはできないとさまざまな投稿で読んだことがあります。だから誰かがコードを通して私を案内してくれますか、どうすれば私のセカンダリスレッドを強制終了し、呼び出しフォームに戻る前にクリーンアップすることができますか.. ?? そのちょっと緊急です...他のスレッドのトピックを指さないでください、私はすでにそれらを訪れました。

特に、クラッシュを起こさずにセカンダリスレッドを停止する方法を知りたいです。ありがとう。