c массивы не встраивают количество своих элементов.
так вы бы объявили метод с неопределенным количеством элементов. это обычно не используется:
`- (NSData*) dataTheseBytes:(const Byte*)bytes;`
// or
`- (NSData*) dataTheseBytes:(const Byte[])bytes;`
более жесткая реализация может указывать количество элементов. Это нормально, если вы всегда используете один и тот же размер. Пример:
enum { MONByteBufferElementCount = 23 };
...
`- (NSData*) dataTheseBytes:(const Byte[MONByteBufferElementCount])bytes
{
return [NSData dataWithBytes:&bytes[0] length:MONByteBufferElementCount * sizeof(bytes[0])];
}
проблема с использованием сообщений objc в этом случае заключается в том, что компилятор может быть не в состоянии определить соответствующий селектор и выдать ошибку или предупреждение, если вы объявили селектор с тем же именем, но используете другие параметры или количество элементов. поэтому безопаснее использовать функцию c:
`NSData* DataTheseBytes(const Byte bytes[MONByteBufferElementCount]) {
return [NSData dataWithBytes:&bytes[0] length:MONByteBufferElementCount * sizeof(bytes[0])];
}
или используйте более подробное имя:
`- (NSData*) dataWithMONByteBuffer:(const Byte[MONByteBufferElementCount])bytes
{
return [NSData dataWithBytes:&bytes[0] length:MONByteBufferElementCount * sizeof(bytes[0])];
}
в objc чаще всего передают длину в качестве аргумента, аналогично конструктору NSData
, который вы вызываете. какая-то часть вашей программы сможет определить это значение (будь то NSData
, массив c или что-то еще).
- (NSData*) dataTheseBytes:(const Byte*)bytes length:(NSUInteger)length
{
return [NSData dataWithBytes:bytes length:length];
}
Также часто можно увидеть количество элементов, например:
- (NSData*) dataTheseFloats:(const float*)floats length:(NSUInteger)count
{
return [NSData dataWithBytes:floats length:count * sizeof(float)];
}
наконец, есть несколько угловых случаев. очевидно, что это строка с нулевым окончанием:
- (NSData*) dataWithASCIIString:(const char*)chars
{
return [NSData dataWithBytes:chars length:strlen(chars)];
}