如果我在我的程序中分配一个对象,那么我需要释放它。如果我创建一个 int,那么我需要调用 free(myint) 还是该变量会在我的函数结束时自动销毁?另外,如果我向我的对象添加 int、long 或 bool 属性,那么我是否需要在 dealloc 中处理 then 或者当我正在使用的函数完成时它们也会被销毁?
3 回答
If I create an int, then do I need to call free(myint) or will the variable be destroyed automatically at the end of my function?
It depends on how you do it: automatic variables of primitive types are deallocated when they do out of scope:
if (a == b) {
int sum = 0;
sum = a + b;
NSLog(@"%d", sum);
}
If you allocate your primitive using malloc
or calloc
, you must use free
at the end (I don't know why you'd want to use primitives like this, though):
if (a == b) {
int *sumPtr = malloc(sizeof(int));
*sumPtr = a + b;
NSLog(@"%d", *sumPtr);
free(sumPtr);
}
Same rules are followed when you add primitive fields to your objects: if you use malloc
in the init
, then you must use free
in dealloc
. Otherwise, the value is allocated "in line" with the rest of your object, and do not need separate deallocation.
作为 C 的超集,自动堆栈变量的规则是相同的。因此,int x;
在函数中定义意味着您不必做任何事情来清理它,因为它在堆栈上。诸如在某些时候需要清理的堆int *x = malloc(...);
分配free(x);
。如果这些步骤发生在一个对象内部(例如 in init
),那么这是同一个想法;一个int
字段可以单独存在,但分配需要通过dealloc
类方法中的释放来平衡。
内存管理的基本要点(没有任何更深入的细节),您必须release
将您创建的每个对象都设置为new
,alloc
或copy
; 或者在你增加retain
了当前对象的计数器之后。
在所有其他情况下,您无需担心调用该release
方法并且您不应该这样做,这会导致崩溃的高风险。
(这只是没有 ARC 的内存管理的粗略基础)
您无需担心原语,除非您之前使用alloc(...);
or为它们分配了内存malloc(...);
;在这种情况下,您必须free(...);
在完成使用它们后分配内存。