Другой способ сделать это в Objective-C - использовать индексированные переменные экземпляра:
@interface ArrayOfFloats : NSObject {
@private
NSUInteger count;
float numbers[0];
}
+ (id)arrayOfFloats:(float *)numbers count:(NSUInteger)count;
- (float)floatAtIndex:(NSUInteger)index;
- (void)setFloat:(float)value atIndex:(NSUInteger)index;
@end
@implementation ArrayOfFloats
+ (id)arrayOfFloats:(float *)numbers count:(NSUInteger)count {
ArrayOfFloats *result = [NSAllocateObject([self class], count * sizeof(float), NULL) init];
if (result) {
result->count = count;
memcpy(result->numbers, numbers, count * sizeof(float));
}
return result;
}
...
@end
Подробнее см. Документацию по NSAllocateObject () . Ограничение индексированных переменных экземпляра состоит в том, что вы не можете создать подкласс класса, который их использует.