Как найти размер любого объекта в iOS - PullRequest
18 голосов
/ 22 ноября 2011

Я оптимизировал свое приложение и хотел узнать, каков размер объекта, чтобы я мог также показать его в журнале.

предположим, у меня есть

   NSDictionary *temp=(NSDictionary*)[Data objectAtIndex:i];

    //data is defined in the .h file 

теперь, как я узнаю, что размер объекта temp.

Я попытался использовать переменную view, и в разделе temp я нашел instance_size = (long int) 30498656

Isinstance_size - это точный размер моего временного объекта?.

Я также пытался

        sizeof(temp);

, но он потерпел крах в этой точке.Любая помощь ...

Ответы [ 5 ]

28 голосов
/ 22 ноября 2011

Компилятор знает только об указателе, и поэтому всегда будет возвращать размер указателя. Чтобы найти размер выделенного объекта, попробуйте что-то вроде

NSLog(@"size of Object: %zd", malloc_size(myObject));
11 голосов
/ 22 ноября 2011

Прежде всего, я думаю, что из приведенных выше сообщений ясно, что размер объекта задается malloc_size(myObject), как это было предложено Legolas, а также в справочном руководстве Mac OS :

Функция malloc_size (ptr) возвращает размер блока памяти, который поддерживает выделение, на которое указывает ptr.Размер блока памяти всегда по крайней мере настолько же велик, как выделение, которое он резервирует, и может быть больше.

Но если вам интересно узнать размер словаря, имейте в виду следующий момент:

Словарь хранит пары ключ-значение и не содержит сам объект в части значения, а просто увеличивает количество сохраняемых объектов, которые должны были быть "добавлены", и сохраняет ссылку на этот объект при себе.,Теперь сам словарь просто содержит ссылки на различные объекты (с прикрепленным ключом).Так что, если по какой-либо причине вы ищете размер объекта для всех объектов, на которые ссылается словарь, технически это не будет размер словаря.Размер словаря будет суммой размера всех ключей плюс размер всех ссылок на значения для ключей плюс размер родительского NSObject.Если вам все еще интересно узнать размер объектов, на которые ссылаются, попробуйте выполнить итерацию по массиву значений словаря:

NSArray *myArray = [myDictionary allValues];
id obj = nil;
int totalSize = 0;
for(obj in myArray)
{
    totalSize += malloc_size(obj);
}
//totalSize now contains the total object size of the refered objects in the dictionary.

Ссылка

5 голосов
/ 28 января 2013

Я бы предложил использовать class_getInstanceSize и malloc_good_size, чтобы посмотреть, к чему это приведет.Это не будет отображать ивары и еще много чего в возвращенном размере.

#import <malloc/malloc.h>
#import <objc/runtime.h>

NSLog(@"Object Size: %zd", malloc_good_size(class_getInstanceSize([yourObject class])));
1 голос
/ 05 августа 2016

В объективе - C:

NSString *sampleString = @"iOS Programming";
 NSLog(@"size of object: %zd", malloc_size((__bridge const void *)(sampleString)));

You need to include:
#import<malloc/malloc.h>

В Swift:

var name: String = "Hello World!"

sizeofValue(name)

var someValue: Double = 10.5

sizeofValue(someValue)
0 голосов
/ 22 ноября 2011

Переменная temp - это адрес памяти.Мы не можем получить объем памяти объекта путем программирования.Мы можем использовать инструмент Allocations для оптимизации приложения в xcode.Нажмите Command+I в xcode4, вы можете найти его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...