Размер NSArray

Как Вы получаете размер NSArray и распечатайте его в консольном использовании NSLog?

48
задан Larme 26 January 2015 в 17:09
поделиться

4 ответа

Размер можно определить, отправив 'count' экземпляру NSArray, а печать на консоль можно сделать через NSLog(), например:

NSArray * array = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
NSLog(@"array size is %d", [array count]);
5
ответ дан 26 November 2019 в 18:44
поделиться

Ответ на другой ответ:

Вы не можете получить размер массива в мегабайтах, по крайней мере, не выполнив некоторые хитрые, неподдерживаемые * 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, если он вообще существует "

10
ответ дан 26 November 2019 в 18:44
поделиться

Не совсем. JSR-275 должен был иметь часть своей функциональности (количество и тип единицы, очень похожие на 256), но SE / EE EC отказался от этого.

Консолидация между SE и ME, как упоминалось в Oracle, может когда-нибудь привести к более распространенной структуре Sensor API и Unit, но маловероятно до появления Java 8.

Вернер

-121------4460082-
int size = [array count];
NSLog(@"there are %d objects in the array", size);
79
ответ дан 26 November 2019 в 18:44
поделиться

Взгляните на этот пост, чтобы узнать о размере массива.

Длина массива в Objective C

Используйте NSLog для записи в консоль ...

NSLog(@"The array size is %@", arraySize);
2
ответ дан 26 November 2019 в 18:44
поделиться