objective-c - 从类方法分配/释放指向数组的指针

标签 objective-c ios arrays memory-management

我有一个自定义对象,我试图在其中编写一个返回 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/

相关文章:

objective-c - 插件架构,访问应用程序中的代码?

objective-c - audit_token_to_pid undefined symbol

ios - 如何找到 ScrollView 内容偏移 Y 点以使所选文本可见。

ios - 在 iPhone Mixer EQGraph 测试中使用 AUGraph 转发歌曲

arrays - 在 swift 中使用通用数组

ruby - 将包含键迭代的数组应用于哈希

arrays - 通过函数传递全局数组在 swift 中不起作用

objective-c - 使用 Cocoa 上传文件夹

ios - 颠倒呈现 UIActivityViewController

iphone - 哪种视频格式最紧凑,同时仍兼容 iOS 播放?