0

我正在尝试在 Objective-C 中实现一个 nxn 多维整数数组,并且因为使用 NSMutableArray 似乎开销太大,我决定只使用 C 的 malloc 和 free 来实现它。我的问题是,下面的代码在 ARC Objective-C 下是否正确(没有内存泄漏)?

@interface TwoDimensionalArray
{
    int **array;
    int size;
}
@end

@implementation TwoDimensionalArray
- (id)initWithSize: (int)s
{
    if(self = [super init])
    {
        size = s;
        array = malloc(sizeof(int*) * size);
        for(int i = 0; i < size; i++)
        {
            array[i] = malloc(sizeof(int) * size);
            for (int j = 0; j < size; j++)
            {
                array[i][j] = 0;
            }
        }
    }
    return self
}
- (id)init
{
    return [self initWithSize:1];
}
- (void)dealloc
{
    for(int i = 0; i < size; i++)
    {
        free(array[i]);
        array[i] = nil;
    }
    free(array);
    array = nil;
}
@end

如果这不正确,或者如果您认为在 Objective-C 中确实有更好的方法可以在不使用 malloc 的情况下执行此操作,请告诉我。谢谢。

4

1 回答 1

6

ARC 实现了Objective-C 对象的自动内存管理,但不自动化malloc/free。(参考:Clang/ARC 文档:GeneralARC 发行说明:FAQ。)

因此,您的问题与 ARC 无关:您malloc()必须接受 free()的一切(并且dealloc是这样做的好地方)。乍一看,您的代码看起来不错。

dealloc(小记:不需要 将数组指针归零,但NULL将是要分配的适当指针值,nil适用于 Objective-C 对象。)

我不知道使用 Objective-C 集合会导致多少开销NSMutableArray ,应该通过分析来测试(正如评论中已经说过的)。

于 2013-04-23T12:22:32.527 回答