Проверка размера объекта в Objective C

Вы можете попробовать:

df[df.pids.replace('\D','',regex=True).eq('1718')]

  indx   pids
2    C  1718,

'\ D': любой символ, который не является цифрой от 0 до 9.

РЕДАКТИРОВАТЬ Принимая во внимание следующее:

  indx       pids
2    C      1718,
5    F  3220,1718
35
задан Coocoo4Cocoa 17 April 2009 в 20:04
поделиться

4 ответа

Во время выполнения GNU Objective-C вы можете использовать (вы должны импортировать :

class_get_instance_size ([MyClass class]);

В Mac OS X вы можете использовать (вам может потребоваться импортировать ):

class_getInstanceSize ([MyClass class]);

Эти функции будут возвращать необходимый объем памяти. чтобы выделить объект, он не будет включать память, выделенную объектом при его инициализации.

19
ответ дан 27 November 2019 в 06:38
поделиться

Я думаю, что описание класса содержит информацию о размере - лучше посмотреть это, чем запрашивать с помощью sizeof оператор.

-2
ответ дан 27 November 2019 в 06:38
поделиться

Размер объекта (objective-c) определить непросто, потому что его непросто даже определить. Что вы имели в виду под «размером объекта objective-c»?

Размер ссылки - это размер указателя (возвращенный функцией sizeof (obj_ref)).

Размер памяти, выделенной при создании (+ alloc), можно узнать по способу, который Джейсон дал в первом ответе. Но это зависит от времени выполнения. Среда выполнения gnu отличается от среды выполнения яблока.В конце концов, это только память, необходимая для примитивных типов данных, из которых состоит экземпляр. Но не память, которая может быть выделена позже (то есть во время инициализации (-init)) для объектов, на которые ссылаются ivars или строки.

Экземпляру класса

@interface FirstClass
{
    int _someInt;
    char _someChar;
}
…
@end

требуется не менее 5 байтов (во многих системах размер int может варьироваться) плюс статические накладные расходы, если это необходимо среде выполнения. Размер такого объекта очевиден.

Но для экземпляра класса

@interface SecondClass
{
    FirstClass *_someObject;
    char *_name;
    id _data;
}
…
@end

определение «размера» является сложным. Объекту требуется 12 байтов (в 32-битных системах) плюс накладные расходы на выделение. Но, возможно, имя является частью объекта и выделяется / освобождается им. Должна ли память, которая нужна фактическому имени, быть частью размера объекта? А как насчет ссылочных объектов?

7
ответ дан 27 November 2019 в 06:38
поделиться

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

С ARC:

#import <malloc/malloc.h>

// ...

NSLog(@"Size of %@: %zd", NSStringFromClass([myObject class]), malloc_size((__bridge const void *) myObject));

Без ARC:

#import <malloc/malloc.h>

// ...

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

У Майка Эша есть приличная статья о некоторых внутренних элементах среды выполнения Obj-C на его блог вопросов и ответов: http://mikeash.com/?page=pyblog/friday-qa-2009-03-13-intro-to-the-objective-c-runtime.html

53
ответ дан 27 November 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: