GNUStep の NSNumber の実装のソース コードを調べて、ファクトリ メソッドの実装がそこでどのように機能するかを理解しました。
そこから私が理解できたのは、すべての initWithXYZ 種類のメソッドに対して空白の実装を持つ NSNumber があることです。NSTemporaryNumber は、特定の型のオブジェクトを実際に作成し、それ自体を自動解放し、作成されたオブジェクトを返すすべての initWithXYZ メソッドを実装した階層内の中間クラスのように機能していました。
また、allocWithZone は、NSNumber オブジェクトの作成を回避し、そうでない場合は特定のタイプのオブジェクトを作成する場合は NSTemporaryNumber のオブジェクトを作成するためにオーバーライドされました。
私が理解できなかったのは、NSNumber自体で同じことを行うことはできないのですか? なぜまったく空の実装を提供し、特定のタイプのオブジェクトを作成してから、自己を自動解放します。
また、NSNumber 自体に createXYZ メソッドの実装がある場合、なぜ initWithXYZ メソッドがあるのでしょうか?
プロジェクトのファクトリ実装を実装する必要がある場合、たとえば video 、 audio 、 photo などの 2 つの mediaItems があるとします。そのために別のクラスと、正しい子クラスのオブジェクトを作成する initWithMediaType に渡す対応する列挙型があります。それとそれ自体を破壊します。
NSNumber と NSTemporaryNumber のような 2 つのクラスがあります: Media と TemporaryMedia と言って、1 つは空白の実装を持ち、もう 1 つは上記の実装を持ちますか?
私はこのようなことをすべきですか?これは、Objective C で Factory パターンを実装する方法ですか?
私の質問はばかげているように思えるかもしれませんが、私は物事が異なって見えるJava、C++のバックグラウンドから来ました。目的は同じかもしれませんが、Objective C には抽象クラスがないため、その方法を理解するのが難しいと感じています。
ソースへのリンク: http://www.koders.com/objectivec/fid46956186C20201706AFE1744AA7AFEEE09D1FE5A.aspx