1

如果我在我的程序中分配一个对象,那么我需要释放它。如果我创建一个 int,那么我需要调用 free(myint) 还是该变量会在我的函数结束时自动销毁?另外,如果我向我的对象添加 int、long 或 bool 属性,那么我是否需要在 dealloc 中处理 then 或者当我正在使用的函数完成时它们也会被销毁?

4

3 回答 3

4

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.

于 2012-07-14T20:08:53.107 回答
3

作为 C 的超集,自动堆栈变量的规则是相同的。因此,int x;在函数中定义意味着您不必做任何事情来清理它,因为它在堆栈上。诸如在某些时候需要清理的堆int *x = malloc(...);分配free(x);。如果这些步骤发生在一个对象内部(例如 in init),那么这是同一个想法;一个int字段可以单独存在,但分配需要通过dealloc类方法中的释放来平衡。

于 2012-07-14T20:04:49.927 回答
0

内存管理的基本要点(没有任何更深入的细节),您必须release将您创建的每个对象都设置为new,alloccopy; 或者在你增加retain了当前对象的计数器之后。

在所有其他情况下,您无需担心调用该release方法并且您不应该这样做,这会导致崩溃的高风险。

(这只是没有 ARC 的内存管理的粗略基础)

您无需担心原语,除非您之前使用alloc(...);or为它们分配了内存malloc(...);;在这种情况下,您必须free(...);在完成使用它们后分配内存。

于 2012-07-14T21:39:35.753 回答