[英]C-style Multidimensional Array in ARC Objective-C
我正在嘗試在Objective-C中實現int的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,請告訴我。 謝謝。
ARC為Objective-C對象和塊實現了自動內存管理,但沒有實現malloc / free的自動化。 (參考: Clang / ARC文檔:常規 , ARC發行說明:FAQ 。)
因此,您的問題與ARC無關:您的所有malloc()
必須都是free()
'd(並且dealloc
是這樣做的好地方)。 乍一看,您的代碼看起來不錯。
(簡短說明:無需將dealloc
的數組指針清零,但是NULL
是要分配的適當的指針值, nil
表示Objective-C對象。)
我不知道使用諸如NSMutableArray
類的Objective-C集合會導致多少開銷,應該通過概要分析來測試(如注釋中已經提到的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.