【问题标题】:How to release memory under following situation?以下情况如何释放内存?
【发布时间】:2011-07-13 15:04:40
【问题描述】:

下面是一些核心图形代码..

        CGColorRef colorRefArray[MAGIC_NUM];

        for (int i = 0; i < MAGIC_NUM ; i++)
        {
           ...

           colorRefArray[i] = CreateColor(colorValueForEachColor, numberofcomp);                
        }

colorRefArray 已经有内存和 CreateColor();将再次创建内存并导致内存泄漏。

如何避免这种情况?

我的一个可能的想法是

            CGColorRef colorRefArray[MAGIC_NUM];

            for (int i = 0; i < MAGIC_NUM ; i++)
            {
               ...
               CGColorRef colorref = CreateColor(colorValueForEachColor, numberofcomp);
               colorRefArray[i] = colorref;
               CFRelease(colorref);

            }

这种方法正确吗?

【问题讨论】:

    标签: macos memory-leaks core-graphics


    【解决方案1】:

    不,因为那样colorRefArray 将被无效指针填充。

    尝试使用 CFMutableArray 而不是原始 C 数组。然后你只需要担心对数组的引用,因为它会为你拥有颜色:

    CFArrayRef CopyColorArray(void) {
        CFMutableArrayRef colorRefArray = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
        if (colorRefArray) {
            for (int i = 0; i < MAGIC_NUM ; i++) {
                ...
                CGColorRef colorref = CreateColor(colorValueForEachColor, numberofcomp);
                if (colorref) {
                    CFArrayAppendValue(colorRefArray, colorref);
                    CFRelease(colorref);
                }
            }
        }
    
        return colorRefArray;
    }
    

    【讨论】:

      【解决方案2】:

      不,不是。您将立即释放您创建的颜色。正确的做法是:

       CGColorRef colorRefArray[MAGIC_NUM];
       for (int i = 0; i < MAGIC_NUM ; i++)
       {
           ...
          colorRefArray[i] = CreateColor(colorValueForEachColor, numberofcomp);                
       }
       //Use your colors
       //Now release them
       for (int i = 0; i < MAGIC_NUM ; i++)
       {
          CFRelease(colorRefArray[i]);
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-02
        • 2014-05-10
        • 2014-08-16
        • 1970-01-01
        • 1970-01-01
        • 2012-12-05
        • 2021-07-11
        • 2023-03-29
        相关资源
        最近更新 更多