malloc +自动引用计数?

时间:2012-05-07 02:37:49

标签: objective-c malloc automatic-ref-counting

如果我使用malloc和自动引用计数,我还需要手动释放内存吗?

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

4 个答案:

答案 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的便利性和安全性。