在编程中,Kernighan & Ritchie引入了一条一般规则,即对于"malloc"分配的所有空间,您都可以调用"free"。
所以下面的代码是正确的:
- (UIImage*) convertImage:(UIImage*)sourceImage {
unsigned char *rawData = malloc(requiredSpace);
...
...
free(rawData);
return imageRef;
}
但是,函数中也有封装。所以从函数返回后,内存会自动释放。所以理论上在上面的例子中并不是绝对需要的。这是对的吗?
绝对没有。
free
是必需的,因为内存将仅释放给静态分配的变量。如果使用malloc
(以及calloc
或realloc
),则正在动态分配不会释放的内存,除非显式调用free
。
例如:
-(void)method {
char a[10];
char *b = (char*) malloc(10*sizeof(char));
}
a
将在范围结束时销毁(至少将被标记为可用内存,以便您不能再依赖其内容),而b
保留在内存中直到程序结束。如果您丢失了指向该内存地址的指针(可能为b
分配另一个值,或者只是结束函数而不返回b
),您将无法再释放内存,这将带来内存泄漏。