Как объявить массив чисел с плавающей точкой как переменную класса в Objective-C, когда измерение не определено во время создания класса? - PullRequest
2 голосов
/ 01 января 2009

На Java это будет выглядеть так:

class Foo
{
  float[] array;
}

Foo instance = new Foo();
instance.array = new float[10];

Ответы [ 3 ]

13 голосов
/ 01 января 2009

Вы можете просто использовать указатель:

float *array;
// Allocate 10 floats -- always remember to multiple by the object size
// when calling malloc
array = (float *)malloc(10 * sizeof(float));
...
// Deallocate array -- don't forget to do this when you're done with your object
free(array);

Если вы используете Objective-C ++, вместо этого вы можете сделать:

float *array;
array = new float[10];
...
delete [] array;
8 голосов
/ 02 января 2009

Вот еще один способ сделать это. Создайте объект NSMutableArray и добавьте к нему объекты NSNumber. Вам решать, будет ли это разумно.

NSMutableArray *array;
array = [[NSMutableArray alloc] init];
[array addObject:[NSNumber numberWithFloat:1.0f]];
[array release];
6 голосов
/ 23 февраля 2010

Другой способ сделать это в 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 () . Ограничение индексированных переменных экземпляра состоит в том, что вы не можете создать подкласс класса, который их использует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...