【问题标题】:Constant Array and Memory Management常量数组和内存管理
【发布时间】:2010-07-28 12:02:43
【问题描述】:

我在我的一个类中定义了一个常量数组:

static const float values[] = {-0.5f,  -0.33f, 0.5f,  -0.33f, -0.5f,   0.33f,};

在我类的dealloc方法中,是否需要释放该字段占用的内存?我该怎么做?我应该改用 NSArrays 吗?

【问题讨论】:

    标签: c objective-c arrays memory-management constants


    【解决方案1】:

    不,您永远不需要释放静态分配的数组。它在进程启动时由系统分配,并一直在作用域内,直到它退出。

    就此而言,非静态数组也不需要它,因为它包含在类中,因此与类一起生存和消亡。

    唯一需要担心生命周期的情况是在堆上分配数组时,这对于 const 值的数组来说有点棘手:

    const float *make_values() {
        float *v = (float *)malloc(6*sizeof(float));
        v[0] = -0.5f;
        v[1] = -0.33f;
        ...
        return v;
    }
    
    const float *values = make_values();
    

    只有这样你才需要担心在某个时候释放内存,然后你可能需要考虑使用具有保留语义的 NSArray 属性。

    【讨论】:

    • 这是有道理的。非常感谢你。什么不是静态的?如果我只有一个 const 数组怎么办?那我该怎么办?
    • @ar106:我已经修改了我的答案以涵盖这一点。
    • 非常感谢。这真的很有帮助。
    • @ar106 : 你释放你分配的东西是拇指规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2010-11-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    相关资源
    最近更新 更多