2016-07-01 3 views
2

現時点での目的と迅速な学習。私はObj Cの初期化プログラムと便利な初期化プログラムを理解しており、Factoryメソッドを理解しています。私はまた、 "コンストラクタ"という言葉を聞いたことがありますが、私は彼らが工場のメソッドや初期化子とどう違うか分かりません。 「コンストラクタ」は初期化子を参照する別の方法ですか?ありがとうファクトリメソッドとコンストラクタの相違点

答えて

3

違いはありません。

インスタンスオブジェクトを作成するクラスメソッドは、長年にわたり、コンビニエンスアロケータまたは - めったにコンストラクタと呼ばれていませんでした。コンビニエンスアロケータという用語は、インスタンスオブジェクトがオートリリースされたときに使用されていましたが、ARCでは重要ではありませんでした。

NSString *string1 = [NSString string]; // autoreleased 
NSString *string2 = [NSSString new]; // ownership transfer 

基本的に彼らは+alloc-init…プラスの組み合わせである - -autorelease - それは便利アロケータであるとき。 2年前(またはそれ以前)には、ファクターメソッドと呼ばれるようになりました。

ただし、名前については忘れてください。彼らが何をするのか、なぜ存在するのか考えてみましょう。古典的な+alloc - -init…の組み合わせでは、クラスは決める機会がなく、-initの引数に依存するため作成するサブタイプはありません。例を挙げましょう:NSSArrayには、2つの(プライベート)サブクラス_NSSmallArray_NSBigArrayがあります。 -initWithEstimatedSize:メソッドで容量として指定した推定サイズからサブタイプを選択したいとします。 +allocはどのように選択し、どのサブタイプを選択して割り当てることができますか?どのような引数をinitメソッドに渡すかはわかりません。

コンストラクタまたは便利なアロケータを使用すると、オブジェクトの割り当てをパラメータ化できます。 +newArrayWithEstimatedSize:または+arrayWithEstimatedSize:はその問題を解決できます。

今、ファクトリメソッドと呼ぶ必要があります。ごめんなさい。物語は同じです。

+0

OPが実際にSwift情報を探していたのかどうかは分かりませんが、Swiftが[convenience _initializer_]という用語を正式化したことに気付く価値があります(https://developer.apple.com/library)。 /prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-ID216)、Swiftの「イニシャライザ」は、ObjCで「コンストラクタ」が使用されている機能をカバーしています。 –

+0

SwiftとObjective-Cというタグが付けられています。 Swiftの概念はObjective-Cからレンダリングされているため、Objective-Cで記述することができます。残りは、最後の3つの段落で言及されているように表現されています。 –

関連する問題