如果我使用malloc和自动引用计数,我还需要手动释放内存吗?
int a[100];
int *b = malloc(sizeof(int) * 100);
free(b);
答案 0 :(得分:20)
是的,你必须自己编写free
的电话代码。但是,如果将指针放在引用计数对象的实例中,则指针可以参与引用计数系统间接:
@interface MyObj : NSObject {
int *buf;
}
@end
@implementation MyObj
-(id)init {
self = [super init];
if (self) {
buf = malloc(100*sizeof(int));
}
}
-(void)dealloc {
free(buf);
}
@end
没有办法将这个电话写到free
- 无论如何,你必须在你的代码中使用它。
答案 1 :(得分:5)
是。 ARC仅适用于Objective-C实例,不适用于malloc()
和free()
。
答案 2 :(得分:0)
在dealloc中添加一个if而不是nil并为了安全而分配给nil。不想释放nil,malloc可能会在init等之外使用。
@interface MyObj : NSObject {
int *buf;
}
@end
@implementation MyObj
-(id)init {
self = [super init];
if (self) {
buf = malloc(100*sizeof(int));
}
}
-(void)dealloc {
if(buf != null) {
free(buf);
buf = null;
}
}
@end
答案 3 :(得分:0)
NSData的某些'NoCopy'变体可以与对malloc的调用配对使用,这将使您不必释放任何内容。
NSMutableData可以用作calloc的更高开销版本,从而提供ARC的便利性和安全性。