簡體   English   中英

ARC Objective-C中的C型多維數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM