Общий размер объекта NSMutableArray
У меня есть NSMutableArray
, который содержит кучу объектов, и я пытаюсь выяснить, сколько памяти используется array
. Посмотрев на несколько мест, я знаю о размере вызова, и когда я его делаю, я получаю 32 бита (который является размером объекта NSMutableArray
, он сам).
Пример кода:
NSMutableArray *temp = [[NSMutableArray alloc]init];
[temp addObject:objectxyz];
[temp addObject:objectabc];
[temp addObject:object123];
теперь я хочу знать размер:)
Ответы
Ответ 1
Чтобы получить количество объектов в массиве, используйте
[temp count]
Если вы хотите использовать общий объем памяти в массиве, вам придется перебирать и суммировать объем памяти каждого объекта, но я не думаю, что общий объект даст вам свой размер. В общем, вам не стоит беспокоиться об использовании памяти.
Ответ 2
size_t size = class_getInstanceSize([temp Class]);
for (id obj in temp) {
size += class_getInstanceSize([obj Class]);
}
Обратите внимание, что class_getInstanceSize объявляется в /usr/include/objc/runtime.h
Также обратите внимание, что это будет учитывать только размер памяти иваров, объявленных в каждом классе.
Ответ 3
Нет прямого способа сделать это, поскольку все объекты просто хранятся по ссылке. В cocoa нет конкретного понятия "размер", тем более что объекты могут иметь несколько владельцев, что может привести к двойному счету или другим проблемам.
Ответ 4
Если NSArray и все объекты, которые он содержит, и все их под-объекты (рекурсивно и т.д.) отвечают на NSCoder, вы можете сериализовать массив во временном блоке памяти NSData, а затем получить размер памяти из этого одного плоского временного объекта.
Ответ 5
Хорошо, вы могли бы сделать что-то вроде:
size_t total;
id obj;
for (obj in temp)
{
total += class_getInstanceSize([obj class]);
}
но это не говорит вам точно, сколько памяти используется на самом массиве, поскольку оно может динамически расти и может иметь больше памяти в любой момент времени, чем нужно для объектов, на которые оно указывает, и, конечно, d необходимо рекурсивно решать любые коллекции.
Если вы пытаетесь понять, сколько памяти вы используете, я предлагаю вникнуть в учебные пособия для инструментов и получить голову вокруг зон памяти, которые она предоставляет.