函数的本地变量内存使用量未由ARC发布

时间:2018-03-05 20:57:19

标签: xcode

我已经为iPhone / iPad编程了三年了,我遇到了最令人费解的问题。我希望有人能够帮助我,因为我非常渴望找到解决方案,或者至少帮助我获得一些我必须缺乏的知识。我做了搜索,搜索和研究 因此,为了演示我的问题,我创建了一个小的简单测试应用程序,其中包含保存在核心数据(名字,姓氏和主要照片)中的主要记录列表。与每个记录相关联的是相册女巫可以包括许多照片。 我在这里发布的代码部分是关于我需要对这些照片中的每一个进行的过程,首先将它们从核心数据中的NSData表示转换为字符串。 我的问题是局部变量" stringPhoto"应该在下一张照片处理之前发布。当我检查调试器的内存分析器时,Witch似乎并不是这样:它会继续增长和增长,与正在处理的照片数量成比例。
因为ARC,"发布"和" dealloc"方法不起作用,使用" stringPhoto = nil"完全没有效果。 我不想关闭ARC,因为我的真实应用程序太大而无法开始管理所有内存使用。

谢谢

class Program
{
    static void Main(string[] args)
    {
        int [] ar1 = { 1, 4, 6};
        int [] ar2 = { 2, 3, 5};

        int[] result = Func(ar1, ar2);
        for( int n=0; n<result.Length; n++)
        Console.Write(result[n]+ ", ");

        Console.ReadKey();

    }

    static int[] Func(int[] array1, int [] array2)
    {
        int[] result = new int [array1.Length + array2.Length];

        int first =0; int second = 0; int current = 0;
        while( current<result.Length) 
        {
            if ( array1[first]>array2[second]) // first is higher
            {
                result[current] = array2[second];
                if (second < array2.Length - 1) second++;
            }
            else if (array1[first] < array2[second]) // second is higher
            {
                result[current] = array1[first];
                if (first < array1.Length - 1) first++;
            }
            current++;
        }
        return result;
    }

    }

enter image description here

1 个答案:

答案 0 :(得分:0)

我怀疑在循环结束时程序会突然释放所有额外的内存。您需要耗尽自动释放池:

for (long int currentItem = 0; (currentItem <= [[self.frc fetchedObjects] count]-1);currentItem++)
{
    @autoreleasepool {
       [self convertCurrentPhotoToStringFromCurrentItem : currentItem];
    }
}