malloc を使用して動的に割り当てられたバッファを NSMutableDictionary に追加し、追加後に直接解放することは可能ですか。これは正しいです?
質問する
67 次
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 に答える