問題タブ [cocoa]
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.
cocoa - NSCoder と NSDictionary、いつ何を使いますか?
NSDictionary または NSCoder/NSCoding をいつ使用するかを決定する方法を理解しようとしていますか?
一般的なプロパティ リストなどの場合、アプリケーションの外部で簡単に編集できる XML ファイルを生成する NSDictionary が簡単な方法のようです。
データを保持するカスタム クラス、または内部にネストされた他のカスタム クラスを処理する場合、含まれているすべてのオブジェクト クラスをステップスルーし、アーカイブ コマンドを使用するときにそれらをエンコードするため、NSCoder/NSCoding の方が適しているように思われます。
NSDictionary は、NSCoder/NSCoding が NSCoding インターフェースを実装するネストされたカスタム クラスを自動的にエンコードする場合、すべてのプロパティまたはデータ特性を単一のレベルに取得して保存できるようにするには、より多くの作業が必要になるようです。
それがバイナリデータであり、アプリケーションの外部で編集できないこと以外に、一方を他方よりも優先して使用する本当の理由はありますか? そして、これらの線に沿って、2 つの間でどちらに傾くべきかの指標はありますか? 明らかな何かが欠けていますか?
objective-c - performSelectorOnMainThread の実装の低レベルの詳細:
Cocoa の「performSelectorOnMainThread:」メソッドの低レベルの実装の詳細について、誰かが知っているか、議論している優れたドキュメントへのポインタを持っているかどうか疑問に思っていました。
私の推測では、おそらくかなり近いと思いますが、mach ポートまたはその上にある抽象化を使用してスレッド内通信を提供し、mach メッセージの一部としてセレクター情報を渡すことです。
右?違う?ありがとう!
更新 09:39AMPST
答えてくれたEvan DiBiaseとMeckiに感謝しますが、明確にするために、実行ループで何が起こるかは理解していますが、答えを探しているのは; 「メソッドはどこでキューに入れられますか?セレクター情報はどのようにキューに渡されますか?」Apple のドキュメント情報以上のものを探しています。
更新 14:21PST
Chris Hanson はコメントで良い点を指摘しています。ここでの私の目的は、自分のコードでそれらを利用するために、基礎となるメカニズムを学習することではありません。むしろ、コードを実行するように別のスレッドに信号を送るプロセスの概念をよりよく理解することに興味があります。私が言ったように、私自身の調査では、IPC がスレッド間でセレクター情報を渡すためにマッハ メッセージングを利用していると信じていますが、何が起こっているのかについての具体的な情報を具体的に探しているので、理解していると確信できます。物事正しく。ありがとう!
更新 03/06/09
私はこの質問に報奨金を出しました。なぜなら、この質問に回答してもらいたいからです。収集しようとしている場合は、現在提出されているすべての回答、これらの回答と私の元の質問の両方へのコメントを含むすべてを必ず読んでください。 、および私が上に投稿した更新テキスト。などで使用されているメカニズムの最低レベルの詳細を探しています。performSelectorOnMainThread:
前述したように、Mach ポートと関係があると思われますが、確実に知りたいです。与えられた答えが正しいことを確認できない限り、報奨金は授与されません。みんな、ありがとう!
objective-c - フラグが設定されるのを NSRunLoop に待機させる最良の方法は?
NSRunLoopに関する Apple のドキュメントには、フラグが設定されるのを待っている間に実行を中断するサンプル コードがあります。
私はこれを使用しており、動作しますが、パフォーマンスの問題を調査する際に、このコードまで追跡しました。私はほぼ同じコードを使用します(フラグの名前が異なるだけです:)そしてNSLog
、フラグが設定された後に(別の方法で)行に a を配置し、その後に行を配置するwhile()
と、一見ランダムです2 つのログ ステートメントの間で数秒間待機します。
遅延は、低速または高速のマシンで異なるようには見えませんが、実行ごとに異なり、少なくとも数秒から最大 10 秒です。
次のコードでこの問題を回避しましたが、元のコードが機能しないのは正しくないようです。
このコードを使用すると、フラグを設定するときと while ループの後のログ ステートメントの間隔が一貫して 0.1 秒未満になります。
元のコードがこの動作を示す理由を知っている人はいますか?
python - statusItem menuItem から起動された NSWindow がアクティブなウィンドウとして表示されない
PyObjC で書かれた statusItem アプリケーションがあります。statusItem には、クリックされたときに新しいウィンドウを起動することになっている menuItem があります。
launchPreferences: メソッドは次のとおりです。
Preferences は NSWindowController クラスです:
XCode (Build & Go) でアプリケーションを実行すると、これは正常に動作します。ただし、ビルドした .app ファイルを XCode の外部で実行すると、statusItem と menuItem は期待どおりに表示されますが、Preferences menuItem をクリックするとウィンドウが表示されません。コンソール出力を確認して、launchPreferences コードが実行されていることを確認しました。
さらに、もう一度 .app ファイルをダブルクリックすると、ウィンドウが表示されますが、たとえば Finder ウィンドウをクリックしてアクティブなウィンドウを変更すると、設定ウィンドウが消えます。これは、アクティブなウィンドウと関係があるように思えます。
更新 1これら 2 つの回答 を試しましたが、どちらも機能しません。launchPreferences メソッドに追加すると、次のようになります。
また
次に、エラーが発生します。
「設定」オブジェクトには属性がありません
objective-c - NSObject の performSelectorOnMainThread:withObject:waitUntilDone を介して呼び出されたメソッド中に発生した例外の処理:
myMethod:
NSObject を介して呼び出された場合、in 中に発生した例外はどうなりperformSelectorOnMainThread:withObject:waitUntilDone:
ますか?
特に、このような呼び出しの範囲でそれらをキャッチできますperformSelectorOnMainThread
か...
waitUntilDone がNO
.
iphone - Objective-C と Cocoa を作成する際に使用するベスト プラクティスは何ですか?
HIGについては知っていますが (これは非常に便利です!)、Objective-C を作成するとき、具体的には Cocoa (または CocoaTouch) を使用するときにどのようなプログラミング手法を使用しますか?
objective-c - Objective C でのオブジェクトの割り当てと初期化
オブジェクトを割り当てて初期化する次の 2 つの方法の違いは何ですか?
と
リンゴの例のほとんどは、最初の方法を使用しています。なぜ割り当て、初期化、オブジェクト化を行った後、すぐに解放するのでしょうか?
python - PyObjC アプリケーションをサンプリング/プロファイリングする最良の方法は何ですか?
Activity Monitor/Instruments/Shark でサンプリングすると、Python インタープリターの C 関数でいっぱいのスタック トレースが表示されます。対応する Python シンボル名を確認していただけると助かります。それを行うことができる DTrace マジックはありますか? Python の cProfile モジュールは、Python 呼び出しの個々のサブツリーをプロファイリングするのに役立ちますが、ユーザー イベントに応答してアプリケーション全体で何が起こっているかを把握するのにはあまり役立ちません。
cocoa - 実行中の Mac OS X のバージョンをプログラムで確認するにはどうすればよいですか?
Tiger と Leopard では動作が少し異なるプログラムがあります。実行中の Mac OS XI のバージョンを正確に判断できるシステム コールを知っている人はいますか? ビルド マシンの OS を特定するためのマクロ定義をいくつか見つけましたが、実行中のマシンの OS を特定するのに適したものは何もありません。
ありがとう、ジョー
cocoa - MacOS スレッド ネットワークのサンプル コードを探しています
私のコードでは、すべてのネットワーク ルーチンを別の NSThread で実行する必要があります。通信用のコールバック ルーチンを渡すライブラリがあります。
私のコールバック ルーチンは、いくつかのデータを HTTP サーバー (NSURLConnection) に POST し、応答を待って (NSRunLoop を開始しますか?)、ライブラリに戻る必要があります。
その後、ライブラリがデータを処理します。ライブラリがスレッドに戻った後、描画とユーザー入力を処理するメイン スレッドに通知を投稿できます。
NSThread で NSURLConnection を使用する方法をカバーするサンプル コードはありますか?