Вы не можете вернуть локальный массив Си. Вам нужно malloc(sizeof(UInt8) * 4)
, заполнить его, вернуть указатель и, конечно, не забудьте освободить его, когда закончите.
Вот пример того, как это будет написано и использовано (просто чтобы подчеркнуть важность освобождения памяти, которую вы выделяете):
+ (UInt8 *)convertToBytes:(int)i {
UInt8 *retVal = malloc(sizeof(UInt8) * 4);
retVal[0] = i >> 24;
retVal[1] = i >> 16;
retVal[2] = i >> 8;
retVal[3] = i >> 0;
return retVal;
}
- (void)someMethodUsingTheOtherOne {
int something = 900;
UInt8 *bytesOfInt = [[self class] convertToBytes:something];
someFunctionUsingTheBytes(bytesOFInt);
free(bytesOfInt);
}
(Вы, вероятно, заметите, что я также изменил его на метод класса. Поскольку он не зависит от каких-либо атрибутов экземпляра, имеет смысл использовать его как метод класса или даже просто функцию. Но это не имеет никакого отношения к тому, как работают массивы и указатели - мне просто нравится использовать хороший стиль кодирования в примерах.)