我想實現在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