2012-03-04 4 views
2

私は、ファクトリメソッドのパターンが適切と思われる場所を開発中のアプリケーション内の領域を特定しました。私は他の言語(C#、Java)のこのパターンには慣れ親しんでいますが、「Cocoa Design Patterns」という本を読んでいました。NSClassFromString()メソッドの使い方を示すDynamic Creationの章があります。この機能のうち、ファクトリメソッドのパターンObjective C:NSClassFromString()

この単一の機能は、多くの場合、よく知られているファクトリメソッドパターンを1行のコードに効果的に縮小します。

典型的なファクトリメソッドパターンではなく、この動的作成メソッドを使用する必要があるかどうかは疑問です。ダイナミックな作成方法は毎回通常の方法に勝つのでしょうか、あるいは、あるものが他のものよりも適切な場合がありますか?

現在、私は標準的なファクトリメソッドパターンを使用する傾向にありますが、私は他の人が何を考えているのでしょうか?

よろしく、 ニック

答えて

3

本の請求が少し強いですが、私は言うだろう。

次の2つの状況でNSClassFromStringを使用する必要があります:あなたは、実行時に文字列としてクラス名を読んでいる

  • 。明らかにクラス名を文字列として取得した場合は、それを何とかクラスオブジェクトに変換しなければなりません。NSClassFromStringはこれを行う方法の1つです。文字列のソースを信頼しない場合は、おそらく文字列(または返されたクラスオブジェクト)を許容クラスのホワイトリストに対してテストする必要があります。

  • フレームワークを弱くリンクしていて、NS_CLASS_AVAILABLE機能をサポートしていないSDK /プラットフォームを使用しています。詳しくはSDK Compatibility Guideをご覧ください。

その他の状況では、[MyClass class]のような式を使用してクラスオブジェクトを取得する方がよいでしょう。そうすることで、クラスが存在しない場合(クラス名のスペルが間違っているなど)、コンパイル時にエラーが発生します。

関連する問題