嫌いにならないでください。:-)
ちなみに、私はあなたが意味したと仮定しています:
(編集:不要なキャストを削除)
MyClass oClass = [[MyClass alloc] initWithLength:5 andText:@"Hello"];
複数の init... メソッドを使用する理由は、開発者が適切に初期化されたインスタンスを作成しやすくするためです。したがって、たとえば、開発者が長さとテキストを使用して MyClass のインスタンスを頻繁に作成する必要がある場合は、それを 1 つのステップで実行できるようにする API を提供することで、開発者の負担を軽減できます。また、開発者がテキスト文字列だけで MyClass のインスタンスを頻繁に作成する必要がある場合は、-initWithText:
メソッドを提供することもできます。
また、この方法で作成されたインスタンスが一時オブジェクトとして頻繁に使用される (つまり、インスタンス変数または静的変数に格納されていない) 場合+myClassWithText:
は、提供されたテキスト文字列で初期化された MyClass の自動解放されたインスタンスを返すようなクラス コンビニエンス メソッドを追加することもできます。
どちらが優れているかについては、可能であればオブジェクトを完全に初期化する方が常に良いため、オブジェクトが両方の値を適切に初期化する必要がある場合は、両方の引数を提供できるメソッドを使用してください。また、作成中のインスタンスへの参照を格納する必要がない場合は、クラス コンビニエンス メソッドを使用して、コードでメモリ管理を処理する必要がないようにします。