7

NSArray と NSMutableArray について質問があります。主に NSArray が不変であり、 NSMutableArray が可変であるという2つの違いを理解しています。そして、私の研究に関する限り、パフォーマンスも同じようなものです。良い答えを見つけることができなかったことが 1 つあります。それは、NSMutableArray が NSArray よりも多くのメモリを使用する場合、および NSMutableArray が NSArray よりも何らかの理由でメモリに厳しい場合です。

提案と説明をいただければ幸いです。

ありがとうヴィック

4

3 に答える 3

13

NSMutableArray は、2 つ (つまり、4 つ、コメントを参照) の理由で、わずかに多くのメモリを使用します。

1) サイズを変更できるため、オブジェクト内にコンテンツを格納できず、ストレージ用の追加の malloc ノードだけでなく、アウトオブライン ストレージへのポインタも格納する必要があります。

2) 要素が追加されたときに一度に 1 つの要素のサイズを変更するのは非常に時間がかかるため、チャンクでサイズ変更され、未使用のスペースが発生する可能性があります。

于 2013-01-24T03:20:19.310 に答える
2

標準配列とstd::vector. 変更可能なデータ構造は、主にメモリではなく、より多くのことを行う必要があります ( と が必要NSMutableArrayNSArrayするものと同じである可能性があります) が、動的にサイズ変更可能であり、不変配列では不要な挿入や削除などのすべての特定の操作を管理する必要があります。 : 次元は、オブジェクトが定数に割り当てられるときに決定されます。

于 2013-01-24T03:13:33.330 に答える
1

通常の使用では、顕著なパフォーマンスの違いはありません。

ただし、応答を作成するために可変配列を内部的に使用するメソッドから NSArray を返す場合、一時配列のコピーにかなりの時間がかかる可能性があることがわかりました。

DTCoreText のいくつかのインスタンスでは、NSArray への [NSMutableArray コピー] が Instruments のメソッド時間の 40% かかることがわかりました。つまり、変更可能な配列を返すと、メソッド時間が半分になりました。

したがって、NSArray と変更可能なパフォーマンスを評価するときは、オブジェクトのコピーを避けることに注意を向けることをお勧めします。タイトなループまたは内部メソッドでは、コピーを避けることをお勧めします。

于 2013-01-24T06:25:46.540 に答える