Если вы не всегда предоставляете метод парной длины, ваша программа никогда не узнает длину возвращаемого массива. Итак ... вам нужно будет поработать где-нибудь, чтобы выполнить это без сбоев.
Если бы я действительно хотел сделать то, что вы делаете, я бы заставил сам класс создать массив, предоставив NSData
. Если это распространено, вы можете использовать соглашение:
- (int*)pixelBuffer;
- (NSData *)pixelBufferForSerialization; // << returns a deep copy of
// self.pixelBuffer as an
// NSData instance.
Таким образом, приведенная выше реализация увидит, что свойство определяет скалярный массив, а затем запросит NSData * data = obj.pixelBufferForSerialization;
вместо попытки создания самих данных.
Обновление
Лучше позволить классу сделать это. Вот как создать NSData
, используя такой массив:
@interface DataManager : NSObject
{
@private
int* things;
size_t nThings;
}
- (int*)things;
- (NSData *)thingsAsNSData;
@end
@implementation DataManager
- (int*)things
{
return things;
}
- (NSData *)thingsAsNSData
{
// note: you may need to choose an endianness for serialization
if (0 == nThings) return [NSData data];w
return [NSData dataWithBytes:things length:nThings * sizeof(things[0])];
}
@end
Опять же - вы хотите, чтобы класс создавал данные, потому что он лучше знает свою собственную структуру.