是否可以使用 malloc 将动态分配的缓冲区添加到 NSMutableDictionary,然后在添加后直接释放它。这个对吗?
问问题
67 次
1 回答
1
不,这非常非常糟糕。一旦你调用 free ,操作系统就可以重新使用内存,所以对缓冲区的任何使用都是不好的。
如果要将数据放入可变字典中,请改用 NSData。
如果出于某种原因您需要存储一个 malloc'd 缓冲区(例如,您从库中获得它),您需要将它包装在一个对象类中。
然后,您可以从包装器对象的 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 回答