0

この質問の意味がわかりません。しかし、この2つの方法のように新しいインスタンスを作成できることを私が見たものをNSObject使用せずに、新しいインスタンスを作成する方法を知りたいです。initializers.NSMutableArray

NSMutableArray *myArray = [[NSMutableArray alloc]init];

通常、メソッドまたはその他NSObjectを使用して上記のようなインスタンスを作成しますが、以下の例のようなメソッドを作成する方法がわかりません..init:designated initializers.

NSMutableArray *myArray = [NSMutableArray array];

のドキュメントを見たことがありますがNSMutableArray、これは のサブクラスですNSArray。またNSArray、上記の例を達成するためにこのような方法もあります。

+(id)array;

array:しかし、メソッド内のコードが何であるかを知りたいです。そうでなければ、自分のメソッドと同じように書く方法はNSObject?? さらに説明が必要な場合は、投票する前に私に尋ねてください。

4

4 に答える 4

2

SomeObject クラスに、このクラス メソッドを追加します。

+(SomeObject)object{
 SomeObject *object = [[self alloc] init];
 //You can do something else to your object here.
 return object;
}

次に、プロジェクトの他の場所で、 SomeObject をインポートして次のことを実行できます。

SomeObject *myObject = [SomeObject object];

基本的に、NSArray が行っているのはそれだけです。独自の NSObject にこのようなことをさせたい場合は、自身のインスタンスを返すクラス メソッド (+) を追加します。そのメソッド内でinitを割り当て、そのオブジェクトに対して他に必要なことを行い、それを返します。

于 2012-12-28T19:26:21.433 に答える
2

Apples のドキュメントオブジェクトの初期化から、オブジェクトの作成時に初期化が実際には必要ないことを推測できます。

初期化は、オブジェクトのインスタンス変数を合理的で有用な初期値に設定します

コードが初期化されたインスタンス変数を想定していない場合、技術的には必要ありませんinit。ただし、非常に多くのcaveats(リンクを参照) ため、実際にinitは、実行する必要があります。私が考えることができる唯一の例外は、オブジェクト クラスをゼロから明示的に作成し、NSObject のようなものに基づいていないことです。そうすれば、すべてがどのような状態にあるかがわかります。

于 2012-12-28T19:40:17.287 に答える
1

表示されているのは、オブジェクトのクラス メソッドです。[NSMutableArray 配列]; 割り当てられた配列を作成し、それを返しています。arc の前は、自動解放された配列も返すため、これは重要でした。しかし、あなたの質問に答えるために、ある時点で alloc/init 関数を呼び出すのは舞台裏です。

また、「alloc」はメモリを割り当てる関数であり、init は割り当てられたオブジェクトを初期化する関数であることに注意してください。「copy」や「new」など、メモリを割り当てるために使用できるキーワードは他にもありますが、それがあなたが探しているものであるとは思えません。

于 2012-12-28T19:25:31.743 に答える
1

オブジェクトのメモリをどこかに割り当てる必要があります。+(id) 配列を呼び出している場合は、次の[NSMutableArray array]ようになります。

+(id)array
{
  return [[NSMutableArray alloc] init];
}

メモリを割り当ててどこかでオブジェクトを初期化する必要がありますが、上記の例で行われているように、クラス メソッドで init を非表示にすることができます。

于 2012-12-28T19:37:25.940 に答える