0

是否可以使用 malloc 将动态分配的缓冲区添加到 NSMutableDictionary,然后在添加后直接释放它。这个对吗?

4

1 回答 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 回答