ключевое слово autorelease - PullRequest
       35

ключевое слово autorelease

3 голосов
/ 17 августа 2011

Я новичок в цели c 2.0. Я столкнулся с автоматическим выпуском этого ключевого слова, и мне просто нужны некоторые разъяснения. Мне просто интересно, в чем разница между двумя строками кода ниже в цели - c 2.0 (заранее спасибо):

  1. [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];

  2. [[UIImage imageWithData:[NSData dataWithContentsOfURL:url]] autorelease];

Ответы [ 2 ]

3 голосов
/ 17 августа 2011

autorelease - это не ключевое слово, это метод, это означает, что этот конкретный объект, получивший вызов, был добавлен в текущий пул автоматического освобождения (который обычно создается Cocoaсам при выполнении событий) и после того, как пул будет очищен, этот объект будет освобожден из памяти, поэтому вам не нужно заботиться о выполнении явного освобождения.

Если у вас не было этого вызова, вам пришлось бы освободитьэтот объект самостоятельно, как только вы закончили его использовать.

Используя autorelease , вы должны убедиться, что в настоящее время доступен пул с автоматическим выпуском, как если бы его не было, утечка вашего объектаи это память не будет востребована.Обычно, когда вы имеете дело с событиями из компонентов Какао, вы можете полагаться на это, в противном случае вы должны создать свой собственный пул авто-релизов.Для получения дополнительной информации обратитесь к официальной документации Apple об этом .

Кроме того, вы не должны вызывать autorelease для объекта, который вы не создали с помощью alloc , это обычное явление.Поведение в библиотеках, основанных на Какао, для инициализации методов, автоматически высвобождающих объекты, поэтому любой метод, который создает объект, но не включает в себя alloc или copy, обычно означает, что объект уже был автоматически освобожден, и вам не следует вызывать его снова.

3 голосов
/ 17 августа 2011

Вторая строка неверна. +imageWithData: уже возвращает автоматически выпущенный объект. По сути, автоматическое освобождение похоже на освобождение, за исключением того, что у вас все еще есть право собственности на объект, пока он не выйдет за пределы области видимости. Прочитайте Руководство по программированию управления памятью для получения дополнительной информации.

Также обратите внимание, что в ARC вам не разрешат использовать этот метод, компилятор сделает это за вас.

...