是否可以使用malloc将动态分配的缓冲区添加到NSMutableDictionary,然后在直接添加后释放它。这是对的吗?
答案 0 :(得分:1)
不,这非常非常糟糕。一旦你自由呼叫,操作系统就可以重新使用内存,因此任何缓冲区的使用都是不好的。
如果要将数据放入可变字典中,请改用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
}