Objective-C-優先に作成するための方法および初期化オブジェクト
-
19-09-2019 - |
質問
はこれらの二つの方法を初期化するオブジェクトが好ましい?
MyClass oClass = [[MyClass alloc] init];
oClass.length = 5;
oClass.text = @"Hello";
を利用したクラスメソッドを含むを同じコードが以下のようなものです:
MyClass oClass = [MyClass myClassWithLength:(int) 5 andText:(NSString *) @"Hello"];
投稿規約に同意します。私が見に行った方は一つではないとわからない場合には、他、またはいかがでしょうか!
解決
している張.:-)
ちなみに、僕はという:
(編集: 除不要集)
MyClass oClass = [[MyClass alloc] initWithLength:5 andText:@"Hello"];
その理由複数init...方法は、より便利にご利の開発者を適切に初期化されう場合がございます。そのため、たとえば表するとともに、開発者が必要となるケースが少なくありにスのインスタンスを作成MyClassの長さやテキスト、生活を楽にするかということを容易に提供するAPIしている。場合に表するとともに、開発者も頻繁に必要なスのインスタンスを作成MyClassも文字列がする情報を提供する -initWithText:
方法。
場合はインスタンスを作成このように使用頻度の高いて一時オブジェクト(すなわちに格納されていないインスタンス変数または静的変数)、また追加クラス便利なメソッドのように +myClassWithText:
ることを返しますautoreleasedのインスタンスMyClassで初期化され、テキスト文字列になります。
とでより:では常により完全に初期化オブジェクトが、その場合、オブジェクトのニーズの両方の価値を適切に初期化され、利用のできる手法を提供するの両方の引数になります。や必要がない場合はアカウントを参考にインスタンスだけの作成、使用、クラスに便利な方法でコードがないへの対応のメモリ管理です。
他のヒント
オブジェクトは長さやテキストなしで使用できない場合は、2番目のオプションは良いかもしれません。これらのフィールドはオプションである場合は、最初のものが良いです。
しかし、私はこの質問への絶対的な真理があるとは思わない。
これは、コードの1行ですべてを初期化するのは非常に低いです。どちらの方法は私のために正常に動作します。
initWithSomething:
方法が利用可能であり、あなたはそれらのプロパティの初期値を提供したい場合は、、私はいつもそれは簡単ですという理由だけで、それを好むだろう。また、常にクラスの不変のバージョンでも動作します。
しかし、どちらのinitメソッドは、本質的に「より良い」です。クラスは、通常、1つのまたは2つの指定初期化子を持っており、他のすべては、単にデフォルト値を持つものを呼び出す - それは必ずしも手つかずのインスタンスのプロパティを残しません。クラスのドキュメントは、その初期化子が行うとどのクラスの指定イニシャライザが何であるかを示す必要があります。例えば、[[NSDate alloc] init]
は、現在の日付と時刻を表すDateオブジェクトを作成するには、NSDateの指定イニシャライザ、initWithTimeIntervalSinceReferenceDate:
を使用します。
ちなみに、これはまた、あなたがクラスをサブクラス化しているとき、あなただけの指定イニシャライザをオーバーライドする必要があることを意味します。他の人がちょうどそれを呼んでいるので、彼らは自由のためのあなたの新しい動作を取得ます。