当前位置:  开发笔记 > IOS > 正文

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

如何解决《当在类实例化时未定义维时,如何在Objective-C中将float数组声明为类变量?》经验,为你挑选了3个好方法。

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

class Foo
{
  float[] array;
}

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

Adam Rosenfi.. 13

你可以使用一个指针:

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;


Chris Lundie.. 8

这是另一种方法.创建一个NSMutableArray对象并向其添加NSNumber对象.由你来决定这是否合理.

NSMutableArray *array;
array = [[NSMutableArray alloc] init];
[array addObject:[NSNumber numberWithFloat:1.0f]];
[array release];


pcbeard.. 6

在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()的文档.索引实例变量的限制是您不能子类化使用它们的类.



1> Adam Rosenfi..:

你可以使用一个指针:

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> Chris Lundie..:

这是另一种方法.创建一个NSMutableArray对象并向其添加NSNumber对象.由你来决定这是否合理.

NSMutableArray *array;
array = [[NSMutableArray alloc] init];
[array addObject:[NSNumber numberWithFloat:1.0f]];
[array release];



3> pcbeard..:

在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()的文档.索引实例变量的限制是您不能子类化使用它们的类.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有