オブジェクトの束を保持するNSMutableArray
がありますが、array
が使用しているメモリ量を把握しようとしています。いくつかの場所を見た後、呼び出しのサイズについて知っています。呼び出しを行うと、32ビット(NSMutableArray
オブジェクトのサイズ)を取得します。
サンプルコード:
NSMutableArray *temp = [[NSMutableArray alloc]init];
[temp addObject:objectxyz];
[temp addObject:objectabc];
[temp addObject:object123];
今、私はサイズを知りたいです:)
配列内のオブジェクトの数を取得するには、使用します
[temp count]
配列の合計メモリ使用量が必要な場合は、ループして各オブジェクトが使用するメモリ量を合計する必要がありますが、一般的なオブジェクトがそのサイズを与えるとは思いません。ただし、一般的には、メモリの使用量について実際に心配する必要はありません。
size_t size = class_getInstanceSize([temp Class]);
for (id obj in temp) {
size += class_getInstanceSize([obj Class]);
}
class_getInstanceSize は/usr/include/objc/runtime.hで宣言されていることに注意してください
また、これは各クラスで宣言されたivarのメモリサイズのみをカウントすることに注意してください。
すべてのオブジェクトは参照によって保存されるため、これを行う直接的な方法はありません。特にオブジェクトには複数の所有者がいるため、二重カウントなどの問題が発生する可能性があるため、ココアには「サイズ」の具体的な概念はありません。
NSArray、およびそれに含まれるすべてのオブジェクト、およびそれらのすべてのサブオブジェクト(再帰的になど)がNSCoderに応答する場合、配列を一時的なNSDataメモリチャンクにシリアル化して、そのメモリサイズを取得できる場合がありますフラットな一時オブジェクト。
さて、あなたは次のようなことをすることができます:
size_t total;
id obj;
for (obj in temp)
{
total += class_getInstanceSize([obj class]);
}
しかし、それはexactly配列が実際に使用しているストレージの量を示していません。もちろん、コレクションを再帰的に処理する必要があります。
使用しているメモリの量を把握しようとしている場合は、Instrumentsのチュートリアルを掘り下げて、それが提供するメモリ使用量のプローブを理解することをお勧めします。