在iOS模拟器中指示使用ARC的内存泄漏

时间:2014-02-17 04:25:24

标签: ios objective-c cocoa-touch memory-leaks automatic-ref-counting

不知怎的,我在模拟器(运行条形图)中看到内存增加。

我有一个名为MyObject的对象,除了int之外什么都没有。在其他一些类中(比如MyCar.h中的MyCar)我有一个MyObject的数组,例如MyObject* junk[8];

以及通过索引返回特定的方法:

-(MyObject*) getJunk:(int) index{
    if(junk[index] == nil){
        return nil;
    }
    return junk[index];
}

在另一个名为DataModel的课程中,我有MyCar *mycar;

DataModel

我调用方法ask

-(void) ask{
    if(mycar == nil){
        return nil;
    }

    for(int i=0;i<8;i++){
        if( [mycar getJunk:i] == nil){
            continue;
        }
    }
}

我每次打电话[self ask]说10,000次。我正在使用ARC,但我注意到每次iOS内存条都会上升。所以有些东西在积累记忆;我不知道是什么,我没有alloc。是的,即使我编写了这样无用的代码,而这些代码对返回到数据模型的junk[i]没有任何作用,也会发生这种情况。

我甚至尝试过

-(void) ask{
    if(mycar == nil){
        return nil;
    }

    for(int i=0;i<8;i++){
        MyObject* temp_junk = [mycar getJunk:i];
        if( temp_junk == nil){
            continue;
        }
        temp_junk = nil;
    }
}

1 个答案:

答案 0 :(得分:0)

如果您在循环中调用[self ask] 10000次,请执行以下操作:

for (int = 0; i < 10000; i++)
    [self ask];

然后你在循环中累积自动释放的对象 - 在循环结束并且主运行循环刷新自动释放池之前,这些对象不会被释放。尝试在循环中创建自己的自动释放池,如下所示:

for (int i = 0 ; i < 10000; i++)
{
    @autoreleasepool
    {
        [self ask];
    }
}

每次循环时都会创建一个新池,每次都刷新它,这样那些自动释放的对象就会消失。