代码之家  ›  专栏  ›  技术社区  ›  Ariel Malka

当在类实例化时维度未定义时,如何在Objective-C中将浮点数数组声明为类变量?

  •  2
  • Ariel Malka  · 技术社区  · 16 年前

    在Java中,它看起来像这样:

    class Foo
    {
      float[] array;
    }
    
    Foo instance = new Foo();
    instance.array = new float[10];
    
    3 回复  |  直到 16 年前
        1
  •  13
  •   Adam Rosenfield    16 年前

    你可以只使用一个指针:

    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;
    
        2
  •  8
  •   Chris Lundie    16 年前

    这是另一种方法。创建一个NSMutableArray对象并向其中添加NSNumber对象。这取决于您是否明智。

    NSMutableArray *array;
    array = [[NSMutableArray alloc] init];
    [array addObject:[NSNumber numberWithFloat:1.0f]];
    [array release];
    
        3
  •  6
  •   pcbeard    15 年前

    在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() 索引实例变量的一个局限性是,你不能对使用它们的类进行子类化。