我的地图对象具有一组坐标。它并不总是具有相同数量的坐标。
在Java中,我只是将对象声明为Double[] xpoints,并在实例化这样的映射时设置其大小:xpoints = new double[npoints];

如何使用Objective-C做到这一点?

我尝试这样做:@property(nonatomic) double * xpoints;,但是当我使用NSLog打印时,所有值都变为0。

地图的初始化:

-(id)initWithXpoints:(double[]) xpointss Ypoints:(double[]) ypointss Npoints:(int)npointss
{
    self = [super init];
    if (self)
    {
        self.xpoints = xpointss;
        self.ypoints = ypointss;
        self.npoints = npointss;
    }
    return self;
}


不过有些奇怪的事情发生了。当我从创建地图的对象中打印xpoints [0]时,这些值将更改为零。我第一次打印它就可以了。第二次只打印零。

我认为这是因为发送到init的xpointss已从内存中删除。如果它是指针,如何“实例化” xpoints属性?

有一个更好的方法吗?

补充:我试图创建一个临时的xpoints像这样:

double tempxpoints[npointss];
double tempypoints[npointss];
for (int i = 0; i < npointss; i++)
{
    tempxpoints[i] = xpointss[i];
    tempypoints[i] = ypointss[i];
}
self.xpoints = tempxpoints;
self.ypoints = tempypoints;


但是它仍然没有用。

编辑:感谢所有的答案。这最终是我的最终Init代码:

-(id)initWithXpoints:(double[]) xpointss Ypoints:(double[]) ypointss Npoints:(int)npointss
{
    self = [super init];
    if (self)
    {
         _xpoints = [[NSMutableArray alloc] init];
         _ypoints = [[NSMutableArray alloc] init];
         for (int i = 0; i < npointss; i++)
         {
             NSNumber *tempx = [NSNumber numberWithDouble:xpointss[i]];
             NSNumber *tempy = [NSNumber numberWithDouble:ypointss[i]];
             [_xpoints addObject:tempx];
             [_ypoints addObject:tempy];
         }
         _npoints = npointss;
    }
    return self;
}

最佳答案

如果将数组分配为局部变量,则它们将被分配在堆栈上。当执行离开函数时,将释放那些存储区。您必须使用malloc()分配可以传递的数组,并使用free()释放它们。

// to allocate
double[] tempxpoints = (double[])malloc(sizeof(double) * npointss);

// to free when not used any more
free(tempxpoints);


但是实际上NSArray被设计为处理这些情况。借助ARC,您甚至不必担心释放内存。

NSMutableArray *tempxpoints = [[NSMutableArray alloc] init];
[tempxpoints addObject:@2]; // wrap the double in an NSNumber object

10-08 07:10