我想实现在Objective-C的int n×n的多维数组,而且由于使用的NSMutableArray似乎是太多的开销,我决定只使用C'S来实现它malloc和免费。我的问题是,ARC Objective-C下的代码是否正确(无内存泄漏)?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没有做mallocs,请告诉我。谢谢。
为什么'NSMutableArray'太多的开销?您是否使用仪器来识别性能问题? – 2013-04-23 12:07:42
如果您使用'calloc'而不是'malloc',则不需要清零数组内容。 – 2013-04-23 12:24:31
在迂回的一面注意:你应该使用NULL而不是nil作为你的数组指针。 nil旨在用于Obj-C对象指针。 – Nicky 2013-04-23 12:28:39