malloc + 自动引用计数



如果我将malloc与自动引用计数一起使用,我仍然需要手动释放内存吗?

int a[100];
int *b = malloc(sizeof(int) * 100);
free(b);

是的,您必须编写调用代码才能自己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的调用 - 无论如何,你必须在代码中使用它。

是的。ARC 仅适用于 Objective-C 实例,不适用于 malloc()free()

NSData 的一些"NoCopy"变体可以与对 malloc 的调用配对,这将使您不必释放任何东西。

NSMutableData可以用作开销较高的calloc版本,它提供了ARC的便利性和安全性。

在 dealloc 中添加一个 if not 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

相关内容

  • 没有找到相关文章

最新更新