agr*_*986 0 c arrays objective-c multidimensional-array
我正在尝试在Objective-C中实现一个nxn多维数组的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
Run Code Online (Sandbox Code Playgroud)
如果这不正确,或者你认为在没有做mallocs的情况下在Objective-C中有更好的方法,请告诉我.谢谢.
ARC为Objective-C对象和块实现自动内存管理,但不自动化malloc/free.(参考文献:Clang/ARC文档:General, ARC发行说明:FAQ.)
所以你的问题与ARC无关:你malloc()必须做
free()的一切(并且这dealloc是一个好地方).从第一眼看,您的代码看起来没问题.
(小备注:将数组指针归零dealloc不是必需的,但是
NULL要分配的适当指针值nil是针对Objective-C对象的.)
我不知道使用Objective-C集合NSMutableArray
会产生多少开销,这应该通过分析来测试(如评论中已经说过的).
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |