私がやりたいのは、Cocoa GUI を使用してかなり単純な Python アプリケーションを作成することだけです.誰かが恐ろしいドキュメントに光を当てたり、コードの巨大なブロックを提供するだけでなく、NSThread.detachNewThreadSelector_toTarget_withObject_ ("queryController", self, None) は..?
[...]
基本的に私がやりたいことは、ObjC を学ばなくても Cocoa アプリケーションを作成することだけです。
私は基本的に Soeren の回答に同意しますが、さらに次のように考えます。
Objective C をある程度理解していなくても Cocoa を使えるようになるまでには、長い時間がかかるでしょう。これは、上で引用したコード行の例で確認できます。
NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None)
これは、Objective C の行を Python で記述する方法です。
[NSThread detachNewThreadSelector:@selector(queryController:) toTarget:self withObject:nil];
ここで、この行が (1) Objective C の行として、または (2) Cocoa フレームワークの呼び出しとして、2 つの方法で見ることができることに注意することが重要です。構文上は (1) のように見えます。NSThread が一連の便利な機能を提供する Cocoa フレームワークであることを認識することにより、(2) と見なされます。この場合、この特定の Cocoa フレームワークにより、オブジェクトが新しいスレッドで何かを開始することが容易になります。
しかしキッカーはこれです: ここでの Cocoa フレームワーク (NSThread) は、フレームワークが記述された言語に明示的に関連付けられた方法で、この便利なサービスを提供しています。つまり、NSThread は、「セレクター」を明示的に参照する機能を提供してくれました。 . セレクターは、実際のところ、Objective C がどのように機能するかについての基本的なものの名前です。
だからこすりがあります。Cocoa は基本的に Objective-C で作成されたものであり、その作成者は Objective C を念頭に置いてそれを構築しました。Cocoa 機能へのインターフェースを他の言語により自然な形に変換することが不可能だと主張しているわけではありません。Cocoa フレームワークを変更して「セレクター」を参照しないようにするとすぐに、それは実際には Cocoa フレームワークではなくなります。翻訳版です。そして、その道を歩み始めると、物事は本当に厄介になると思います. あなたは Apple が Cocoa を更新するのに遅れないようにしようとしていますが、新しい言語にうまく翻訳されていない Cocoa の部分に遭遇するかもしれません。その代わりに、PyObjC のようなものは、非常に明確で単純な相関関係を持つ方法で Cocoa を直接公開することを選択します。彼らがドキュメントで言うように:
Objective-C メッセージと Python メソッドとの間のロスレスで明確な変換を行うために、同等の Python メソッド名は、コロンをアンダースコアに置き換えた単純なセレクターです。
確かに、それは少し醜いです。それは、Objective-C について何かを知る必要があることを意味します。