ARC Objective-C中的c风格多维数组



我试图在Objective-C中实现一个n x n多维int数组,因为使用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,请告诉我。谢谢。

ARC实现了对Objective-C对象的自动内存管理,但是没有malloc/free的自动化。(参考:Clang/ARC文档:General,ARC发布说明:FAQ.)

所以你的问题与ARC无关:你的malloc()必须是free() 'd (dealloc是一个好地方)。从第一眼看,你的代码看起来不错。

(小备注:dealloc中的数组指针不需要归零,但是NULL应该是合适的指针值,nil是用于Objective-C对象的。

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

相关内容

  • 没有找到相关文章

最新更新