Если вы используете Objective C, вы знаете, что вы можете просто использовать NSMutableArray, который автоматически выполняет realloc трюк, чтобы перераспределить себя, чтобы хранить все количество объектов, которые вы вложили в него, до предела вашей памяти.
Но вы пытаетесь сделать это со структурой? Что бы это значило? Предположим, вы увеличиваете объем памяти, доступный для struct1 в Object. Это по-прежнему структура с одним членом и больше ничего не делает.
Является ли идея сделать объект способным содержать расширенную структуру?
typedef struct _test2 {
float value;
NSObject *reference;
} test2;
Но вы все еще не можете получить доступ к reference
нормально, потому что это не известная часть объекта.
Object *object2;
...
NSLog(@"%@", object2.struct1.reference); // does not compile
Если вы знали, что вы были одним из ваших модифицированных объектов, вы могли бы сделать
Object *object2;
...
NSLog(@"%@", ((test2)(object2.struct1)).reference);
А также вы можете по-прежнему предположительно пройдет object2 к чему-либо, что ожидает объекта. У этого есть только шанс работать, если struct1 является последним членом Объекта, и не вмешивается в объект подкласса.
Возможно, после этого может возникнуть множество разнообразных трюков realloc, но я не думаю, что realloc в частности, потому что это предназначено для использования в объектах, которые выделяются с помощью malloc, а также о деталях того, какая функция C используется для выделения объектов в не показано в Objective C, поэтому вы не должны предполагать, что это malloc. Если вы переопределите alloc
, вы можете убедиться, что используется malloc.
Также вы должны следить за тем, что в Objective C обычно используется более одного указателя на объект, который существует. realloc может перемещать объект, который не будет семантически корректным, если вы не исправите все указатели.
realloc работает с динамически выделенными указателями, а не на массивах (которые выделяются компилятором). – zmbq
Хм, да. Я считаю, что это то, что я сказал. –
Итак, если бы я использовал функцию 'malloc',' realloc' был бы хорошим вариантом? – Justin