10

自動参照カウントと一緒にmallocを使用する場合でも、手動でメモリを解放する必要がありますか?

int a[100];
int *b = malloc(sizeof(int) * 100);
free(b);
4

4 に答える 4

21

はい、自分で呼び出しをコーディングする必要がありfreeます。ただし、参照カウントされたオブジェクトのインスタンスにポインタを置くと、ポインタが間接的に参照カウントシステムに参加する可能性があります。

@interface MyObj : NSObject {
    int *buf;
}
@end

@implementation MyObj

-(id)init {
    self = [super init];
    if (self) {
        buf = malloc(100*sizeof(int));
    }
}
-(void)dealloc {
    free(buf);
}

@end

その呼び出しを書く方法はありませんfree-いずれにせよ、コードにそれを含める必要があります。

于 2012-05-07T02:50:41.813 に答える
4

はい。malloc()ARCはObjective-Cインスタンスにのみ適用され、およびには適用されませんfree()

于 2012-05-07T02:38:30.780 に答える
1

NSDataの一部の「NoCopy」バリアントは、mallocの呼び出しと組み合わせることができます。これにより、何も解放する必要がなくなります。

NSMutableDataは、ARCの利便性と安全性を提供するcallocのオーバーヘッドバージョンとして使用できます。

于 2019-10-14T18:11:37.137 に答える
0

Deallocで、nilでない場合は追加し、安全のためにnilに割り当てます。nilを解放したくない場合、mallocはinitなどの外部で使用される可能性があります。

@interface MyObj : NSObject {
    int *buf;
}
@end

@implementation MyObj

-(id)init {
    self = [super init];
    if (self) {
        buf = malloc(100*sizeof(int));
    }
}

-(void)dealloc {
    if(buf != null) {
        free(buf);
        buf = null;
    }
}

@end
于 2014-07-15T15:24:59.547 に答える