自動参照カウントと一緒にmallocを使用する場合でも、手動でメモリを解放する必要がありますか?
int a[100];
int *b = malloc(sizeof(int) * 100);
free(b);
自動参照カウントと一緒にmallocを使用する場合でも、手動でメモリを解放する必要がありますか?
int a[100];
int *b = malloc(sizeof(int) * 100);
free(b);
はい、自分で呼び出しをコーディングする必要があり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
-いずれにせよ、コードにそれを含める必要があります。
はい。malloc()
ARCはObjective-Cインスタンスにのみ適用され、およびには適用されませんfree()
。
NSDataの一部の「NoCopy」バリアントは、mallocの呼び出しと組み合わせることができます。これにより、何も解放する必要がなくなります。
NSMutableDataは、ARCの利便性と安全性を提供するcallocのオーバーヘッドバージョンとして使用できます。
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