Правильный способ приведения размера ALAssetRepresentation (long long) к size_t для 32-битных устройств

У меня есть следующий код, который извлекает данные из файла ALAssetRepresentation.

ALAssetRepresentation *representation = ...;
size_t size = [representation size]; // 'size' returns a long long
uint8_t *bytes = malloc(size);

При сборке для 32-битных устройств на iOS я получаю следующее предупреждение.

введите здесь описание изображения

Слепое приведение long long к size_t работает, но я не знаю, как "правильно" справиться с этой ситуацией. Хотелось бы узнать, как лучше с этим справиться.


person Tim Johnsen    schedule 01.05.2015    source источник


Ответы (1)


Поскольку вы присваиваете тип size_t, приведите результат к типу size_t.

size_t size = (size_t)[representation size];

Единственный риск в этом состоит в том, что representation size может быть числом больше, чем то, что поместится в size_t. Но если это произойдет, значение слишком велико, чтобы в любом случае выделить для него память при работе на устройстве iOS, так что это более серьезная проблема, чем потеря точности.

person rmaddy    schedule 01.05.2015