自動参照カウントとともにmallocを使用する場合は、手動でメモリを解放する必要がありますか?malloc +自動参照カウント?
int a[100];
int *b = malloc(sizeof(int) * 100);
free(b);
自動参照カウントとともにmallocを使用する場合は、手動でメモリを解放する必要がありますか?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
に呼び出す執筆の周り方法はありません他にも、あなたのコードでそれを持っている必要があります。
はい。 ARCはObjective-Cインスタンスにのみ適用され、malloc()
およびfree()
には適用されません。
何について新しいint [100];? –
ARCは '[ClassName alloc]'で作成されたObjective-Cインスタンスのみを処理します。 –
申し訳ありませんが、 'Vertex v;'によって作られた構造体があるかどうか教えてください。 Objective-Cインスタンスとしてカウントされますか? –
deallocでは、nilでない場合はaddを、安全の場合は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
私は 'dealloc'で' buf!= NULL'をチェックする理由を理解できません。 'init'の' malloc'の後に 'buf == NULL'をチェックするべきでしょうか?もしそうなら、そのエラーを処理しますか?それでは、 'dealloc'で' buf!= NULL'をチェックする必要はありません。また、 'dealloc'の終わりに' buf = NULL'を設定する点は何ですか?特に、 'buf'がプライベートなインスタンス変数である場合、' dealloc'が呼ばれた後に 'buf'にアクセスするためにあなたのコードで何か変わったことをする必要はありませんか? – ma11hew28
あなたは正しいです。 ifの唯一の理由は、クラッシュを避けるためにfree(null)を呼び出すことを避けることです。ちょうどテスト、無料(null)はクラッシュしません。 –
インスタンスを削除すると、ARCはdeallocを呼び出しますか? –
@stasまあ、直接ではありません:ARCは '[obj release]'を呼びます - それはその唯一の仕事です。解放時にrefカウントがゼロになる結果になるときだけ、 '[obj dealloc]'が呼び出されます。 – dasblinkenlight