我的地图对象具有一组坐标。它并不总是具有相同数量的坐标。
在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