Я читал документацию из яблока об управлении памятью, когда я добрался до блоков пула автообновления и что-то заставило меня задуматься.блоки блокировки автозапуска iOS
Any object sent an autorelease message inside the autorelease pool block is
released at the end of the block.
Я не уверен, что полностью понимаю это. Любой объект, созданный внутри блока пула автозапуска, все равно будет выпущен в конце блока, потому что это его продолжительность жизни. Зачем вам нужно вызывать авторекламу для объекта, когда он будет выпущен, когда он достигнет конца блока?
Чтобы понятнее, я приведу пример, что я имею в виду:
@autoreleasepool {
MyObject *obj = [[MyObject alloc] init]; // no autorelease call here
/* use the object*/
//....
// in the end it should get deallocated because it's lifespan ends, right?
// so why do we need to call autorelease then?!
}
PS: Пожалуйста, не говори мне, что из-за АРК нам не нужно делать какие-то вещи потому что ARC заботится о них. Я полностью это понимаю, но я хочу оставить ARC в течение нескольких секунд, чтобы понять механизм управления памятью.
так как это отвечает на мой вопрос? Я представил простой пример, чтобы избежать подобных ответов, которые не имеют большого отношения к вопросу.Я также добавил комментарии к небольшому примеру. – Teo
Как правило, вы используете только пулы автозапуска в функции, где есть большое использование памяти, и вам нужно освободить ее раньше, чем обычно. Этот пункт призван добавить контекст. – Kibitz503
Итак, в случае без ARC env, '' MyObject * obj = [[MyObject alloc] init]; '' внутри пула автозапуска будет утечкой памяти, но в ARC env компилятор автоматически добавит запрос на выпуск для объект или почему он больше не является утечкой памяти? – Teo