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