将指针位置和长度转换为数组

时间:2013-11-30 03:11:02

标签: ios objective-c pointers

对不起,如果这应该是显而易见的,但我找不到答案。 这是我正在使用的一些代码的一部分,我保存对tempData和长度的引用。我需要知道如何使用该引用和长度来稍后检索CGPoints。这可能吗?谢谢你的帮助!

- (void)setData:(float *)theData length:(int)length {

    CGPoint *tempData = (CGPoint *)calloc(sizeof(CGPoint), length);
    for(int i = 1; i < length - 1; i++) {
        tempData[i] = CGPointMake(i, theSampleData[i]);
    }
}

2 个答案:

答案 0 :(得分:2)

您分配空间,但指向新存储的指针在范围内是本地的,并且将丢失。

您希望使用属性(或实例变量)来存储值。

首选方法是在.m文件中使用类扩展来保持信息的私密性:

@interface MyClass ()
@property (nonatomic, assign) CGPoint *points;
@property (nonatomic, assign) NSUInteger pointCount;
@end

您还应该实施

- (void)dealloc {
  [super dealloc];
  free(points);
  points = NULL;
}

答案 1 :(得分:2)

好的,所以你动态分配内存并用它来存储值。当然,你可以做到。

不要让setData方法创建局部变量tempData,而是将tempData作为类的实例变量。在init方法中将其设置为nil。还要使长度变量为实例变量并将其初始化为零。

在setData方法中,分配指针并将数据保存到它。还节省了长度。

然后,在您的类中的任何其他位置,您只需索引到您的tempData变量,就像您正在设置值一样。

为类检查dealloc方法,检查tempData是否为nil。如果不是,请将其释放。

这是使用malloc内存(或calloc'ed内存 - 同样的东西)和指针的基本C内存管理。