如果我使用 malloc 和自动引用计数,我还需要手动释放内存吗?
int a[100];
int *b = malloc(sizeof(int) * 100);
free(b);
如果我使用 malloc 和自动引用计数,我还需要手动释放内存吗?
int a[100];
int *b = malloc(sizeof(int) * 100);
free(b);
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.
是的。ARC 仅适用于 Objective-C 实例,不适用于malloc()
and 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