内存管理面试题 (内存没有立即释放,造成内存堆积)

问:这段代码是否合理?如果不合理,给出修改意见.

@autoreleasepool {

    for (int i = 0; i < 100000; i++) {

            Person *per = [[Person alloc] init];

            [per autorelease];

    }

}

一般面试题都有问题,不然怎么考察你?你说呢?

所以这道题是存在问题的.

问题在于:一直开辟空间,却没有释放,造成内存堆积,最后程序crash.

解决方案:

@autoreleasepool {

    for (int i = 0; i < 100000; i++) {

        @autoreleasepool {

            Person *per = [[Person alloc] init];

            [per autorelease];

        }

    }

}

原理:每开辟一次空间,就销毁一次,这样就不会造成内存的堆积.

autorelease会将声明为autorelease的对象放入离他最近的自动释放池中,当自定释放池销毁时,会向池中的每一个对象发送一个release消息.

内存管理的原则:如果你对一个对象进行了alloc,retain,copy之后,你就拥有了该对象的所有权,你就必须对它进行release或者autorelease.

你可能感兴趣的:(OC)