0

malloc を使用して動的に割り当てられたバッファを NSMutableDictionary に追加し、追加後に直接解放することは可能ですか。これは正しいです?

4

1 に答える 1

1

いいえ、これは非常に悪いです。free を呼び出すとすぐに、OS はメモリを再利用できるため、バッファの使用は不適切です。

データを変更可能な辞書に入れたい場合は、代わりに NSData を使用してください。

何らかの理由で malloc されたバッファを格納する必要がある場合 (ライブラリから取得した場合など)、オブジェクト クラスでラップする必要があります。

次に、ラッパー オブジェクトの dealloc から free を呼び出すことができるため、ラッパー オブジェクトが解放されるまで free は呼び出されません (ディクショナリが解放されると、ARC によって処理されます。

@interface MallocedMemoryWrapper

@property ( nonatomic, assign) void* wrappedMemory;
@end

@implementation MallocedMemoryWrapper
- (MallocedMemoryWrapper*) initWithMemory:(void*) memory {

    self.wrappedMemory = memory;
}

- (void) dealloc {
    free( self.memory);
}
@end

}
于 2013-04-25T11:25:15.020 に答える