对不起,如果这应该是显而易见的,但我找不到答案。 这是我正在使用的一些代码的一部分,我保存对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]);
}
}
答案 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内存管理。