2011-07-18 10 views
2

私は、ボタン、ビュー、レイヤーを追加し続けるCocoaアプリケーションを作成しています。しかし、これらすべての追加のために、私のappdelegateクラスはかなり大きくなり、読みにくくなっています。そこで私は、UI関連の呼び出しのいくつかを他のクラスに移動させることを決めました。しかし、UI呼び出しはメインスレッドでのみ行われ、appdelegateから(私が間違っていれば私を修正する)必要があるようです。呼び出しを他のクラスに移動する私の実験でも、すべてがメインスレッド上で正しく実行されたことを確認することが難しくなりました。したがって、私のUI呼び出しはすべて、依然としてappdelegateクラスから呼び出されます。Cocoaアプリケーションを設計する

私の質問は、私のアプリケーションのデザインを改善する方法ですか?スレッドを使用する際の問題を回避する方法で、UIをappdelegate以外のクラスから呼び出すことはできますか? appdelegateクラスをボタン、ビューなどの厳しいファイルに分割することはできますか?または、アプリケーションを設計するより良い方法がありますか?例やチュートリアル/書籍へのリンクに関する提案は非常に高く評価されています。

ありがとうございました。乾杯、トンド

+0

これは 'Cocoa'でタグ付けされているので、あなたはMacで作業していると思いますよね? –

+0

はい。私はMacで作業していることをより明確にすべきでした。 –

+4

AppKitは、あなたがアプリケーションオブジェクトのデリゲートからやっていることやしていないことを気にしません。特定のオブジェクトのデリゲート内になければならないのは、そのデリゲートプロトコルのメソッドだけであり、通常はその一部だけです(通知メソッドはどこにでも実装できます)。ビューの描画コードはビュー内にある必要があります(別のオブジェクトからのビューを描画しないでください)。これらとは別に、与えられた種類のコードを特定のクラスに含める必要はありません。 –

答えて

4

ココアは、Model-View-Controllerアーキテクチャに大きく基づいています。 Cocoa Design Patternsのリファレンスで、このパターンをCocoaでどのように使用するかについての素晴らしい読書があります。基本的には、できるだけアプリケーションデリゲートにUIコードを少なくしたいとします。アプリデリゲートは、可能であれば、アプリレベルのコントロールのためにの責任を負います。別のコントローラクラスにUIコントローラコードを配置する方がはるかに優れています。 MVCアーキテクチャは正しいパスを導きます。 Cocoaはビューを提供し、モデルクラス(アプリケーションの "ビジネス"ロジック)を記述し、次にView Controllerを使用して2つを調整します。

3

UIコールはメインスレッドから行う必要があり、その部分は正しいです。しかし、あなたはアプリケーションデリゲートからそれらを行う必要はありません。メインスレッドで実行されている限り、好きな場所で実行できます。

他のスレッドでAFAIK UIKitを実行することはできますが、AFAIK UIKitはスレッドセーフではないため、奇妙なことが起こり、クラッシュする可能性があります。

他の特殊なクラスに分割しても問題はありません。私はいつもそれをする。状態を保存して管理するオブジェクトを1つ導入し、特殊な「コントローラ」にアクセスできるようにすることもできます。

UIViewControllerをご覧ください。あなたのアプリを「ページ」に分割することができれば、この方法が役立つかもしれません。

+0

質問はココアについてではなく、ココアタッチについてです。 UIKitはここでは関係ありません。あなたが言ったことはすべて、AppKitについては、最後の段落まで真実です。 –

+0

@Peter Hosey:そうです、私の脳はどうにか「タッチ」で密輸されます。それを指摘してくれてありがとう。 – DarkDust

+0

私の非タッチのココアはちょっと錆びますが、 "UIViewController"と "pages"を "NSWindowController"と "windows"に置き換えるとおそらく最後の段落も適用されます。 – nevyn

関連する問題