我有一个自定义对象,我试图在其中编写一个返回 CGPoint 结构数组的便捷类方法。原因是有多种方法,例如 CGPathAddLines ,它们将其作为参数,而类方法可以使我免于将自定义对象转换为 CGPoint 数组每次都构造。不幸的是,我不确定实现这一目标的最佳方法,特别是在内存管理方面。
这是我迄今为止的实现:
+ (CGPoint*)CGPointsFromData:(NSArray*)data
{
CGPoint *points = (CGPoint*)malloc(data.count * sizeof(CGPoint));
DataPoint *dataPoint;
int i = 0;
for (id object in data) {
if ([object isKindOfClass:[DataPoint class]]) {
dataPoint = (DataPoint*)object;
points[i] = dataPoint.point;
i++;
}
}
return points;
}
编辑:如果不清楚,DataPoint
类有一个属性 CGPoint point
。
最佳答案
如果您希望这是一个类方法,请在方法名称中放置单词“alloc”或类似的内容,并将释放内存的义务交给方法的调用者,然后只需返回您的指针已分配(无需涉及此方法内任何其他范围的变量)。然后,任何调用此方法的人都可以将指针存储在实例变量中,并在适当的时候释放它。
+ (CGPoint*)allocCGPointsArrayWithData:(NSArray*)data
{
CGPoint *thesePoints = (CGPoint*)malloc(data.count * sizeof(CGFloat));
DataPoint *dataPoint;
int i = 0;
for (id object in data) {
if ([object isKindOfClass:[DataPoint class]]) {
dataPoint = (DataPoint*)object;
thesePoints[i] = dataPoint.point;
i++;
}
}
return thesePoints;
}
然后使用它(在本例中来自同一个类)
// @interface
@interface FooViewController:UIViewController {
CGPoint *_myPointsCArray;
}
// @implementation
-(void) viewWillAppear {
_myPointsCArray = [[self class] allocCGPointsArrayWithData:self.dataArray];
[super viewWillAppear];
}
-(void) viewWillDisappear {
free(_myPointsCArray);
[super viewWillDisappear];
}
关于objective-c - 从类方法分配/释放指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11527169/