10

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

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

4 回答 4

21

Yes, you have to code the call to free yourself. However, your pointer may participate in the reference counting system indirectly if you put it in an instance of a reference-counted object:

@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

There is no way around writing that call to free - one way or the other, you have to have it in your code.

于 2012-05-07T02:50:41.813 回答
4

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

于 2012-05-07T02:38:30.780 回答
1

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

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

于 2019-10-14T18:11:37.137 回答
0

在 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
于 2014-07-15T15:24:59.547 回答