Подтвердить что ты не робот

Как найти размер любого объекта в iOS?

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

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

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

//data is defined in the .h file 

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

Я попытался использовать переменную view и во временном разделе нашел:

instance_size=(long int)30498656

Является ли instance_size точным размером моего временного объекта?.

Я тоже пробовал

sizeof(temp);

но в этот момент он разбился. Любая помощь...?

4b9b3361

Ответ 1

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

NSLog(@"size of Object: %zd", malloc_size(myObject));

Ответ 2

Прежде всего, я думаю, что из приведенных выше сообщений ясно, что размер объекта задается 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.

Ссылка

Ответ 3

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

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

NSLog(@"Object Size: %zd", malloc_good_size(class_getInstanceSize([yourObject class])));

Ответ 4

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

Ответ 5

В объективе 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)