Ответ на другой ответ:
Вы не можете получить размер массива в мегабайтах, по крайней мере, не сделав несколько хитрых, неподдерживаемых * C voodoo. NSArray
- это кластер классов, что означает, что мы не знаем, как это реализовано внутри. Действительно, используемая реализация может меняться в зависимости от количества элементов в массиве . Более того, размер массива не зависит от размера объектов, на которые ссылается массив, так как эти объекты находятся где-то еще в куче. Даже структура, которая содержит указатели на объекты, технически не является «частью» массива, поскольку она не обязательно calloc
'прямо рядом с фактическим NSArray
в куче.
Если вам нужен размер самой структуры массива, то это всего лишь 4 байта:
NSLog(@"Size: %d", sizeof(NSArray));
Печать:
2010-03-24 20:08:33.334 EmptyFoundation[90062:a0f] Size: 4
(Конечно, это не приличное представление, поскольку NSArray
, вероятно, является просто абстрактным интерфейсом для другого типа объекта, обычно что-то вроде NSCFArray
. Если вы посмотрите на NSArray.h
, вы увидите, что NSArray
не имеет переменных экземпляра. Довольно странно для чего-то, что должно содержать другие объекты, а?)
*
Под «неподдерживаемым» я подразумеваю «не рекомендуется», «углубляясь во внутреннюю мистику кластеров классов» и «недокументированный и закрытый API, если он вообще существует»