画像の配列を作成したいとします。これを使用しました。
NSMutableArray *images = [[NSMutableArray alloc]init];
ここでinitは実際にどのような役割を果たしますか?単に使用した場合は機能しません:
NSMutableArray *images = [NSMutableArray alloc];
助けてください。ありがとう。
画像の配列を作成したいとします。これを使用しました。
NSMutableArray *images = [[NSMutableArray alloc]init];
ここでinitは実際にどのような役割を果たしますか?単に使用した場合は機能しません:
NSMutableArray *images = [NSMutableArray alloc];
助けてください。ありがとう。
いいえ、絶対に言うことはできません[NSMutableArray alloc]
。そのメソッドがメソッドの1つでない限り、任意の+alloc
クラスに送信した結果でメソッドを呼び出すことは絶対に正しくありません。オブジェクト用にメモリを予約するだけです。基本的にはを呼び出すのと同じです。このメソッドは、オブジェクトを実際に動作状態に初期化するために重要です。-init...
+alloc
calloc(sizeof(class), 1)
-init
これは、配列だけでなく、インスタンス化できるすべてのObjective-Cクラスに適用されます。alloc
インスタンスを保持するためにメモリを割り当てますが、インスタンスには何も入れず、init
実際にはそのメモリ位置でオブジェクトを初期化します。
NSMutableArraysを使用するときに最高のパフォーマンスを得るには、常にその周辺を使用する必要がありますinitWithCapacity:25
。これにより、適切な量の行またはエントリに十分なメモリがクリアされます。initのままにしておくと、初期容量0に初期化されると思います。つまり、何かを追加するたびに新しいメモリを割り当てる必要があり、アプリのパフォーマンスが低下します。
場合によっては、Objective-C内にスキームを短絡させるための「スウィズル」がたくさんありますが、理論モデルalloc
では、オブジェクトのみのスペースを作成(ヒープから割り当て)します。スペースの内容は本質的にランダムです-その場所を占めるために前のオブジェクトから残されたものは何でも。
の後alloc
、init
クラス固有の方法でスペースを初期化します。NSMutableArrayの場合、これはヘッダーが作成され(その最初の部分は、NSObjectのsuper
呼び出しによって実際に作成されるinit
)、使用中の配列エントリの数などが初期化されることを意味します。
NSMutableArrayの場合、 。array
ではなく「便利な」メソッドを呼び出してalloc/init
、と同等の方法を実行できることに注意してください[[[NSMutableArray alloc] init] autorelease]
。また、どのクラスでも、new
「コンビニエンス」メソッドを呼び出して、と同等の機能を実行できます[[SomeClass alloc] init]
。