How to declare an array of floats as a class variable in Objective-C when the dimension is undefined at the class instantiation time?

前端 未结 3 1001
执念已碎
执念已碎 2021-02-11 04:36

In Java, it would look like this:

class Foo
{
  float[] array;
}

Foo instance = new Foo();
instance.array = new float[10];
相关标签:
3条回答
  • 2021-02-11 05:06

    You can just use a pointer:

    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);
    

    If you're using Objective-C++, you could instead do:

    float *array;
    array = new float[10];
    ...
    delete [] array;
    
    0 讨论(0)
  • 2021-02-11 05:08

    Here's another way to do it. Create a NSMutableArray object and add NSNumber objects to it. It's up to you to decide whether or not this is sensible.

    NSMutableArray *array;
    array = [[NSMutableArray alloc] init];
    [array addObject:[NSNumber numberWithFloat:1.0f]];
    [array release];
    
    0 讨论(0)
  • 2021-02-11 05:14

    Another way to do this in Objective-C is to use indexed instance variables:

    @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
    

    For more see the documentation for NSAllocateObject(). A limitation of indexed instance variables is that you can't subclass a class that uses them.

    0 讨论(0)
提交回复
热议问题