Есть ли быстрое правило, чтобы узнать, когда выпускать переменные Objective-C?
Существуют ли практические правила при работе с Objective-C, которые помогли бы мне понять, когда самое подходящее время для выпуска переменных?
4 ответа
NARC!:)
Если вы вызвали метод, содержащий N ew, A lloc, R etain или C opy, то вы должны release
или же autorelease
, В противном случае вы не трогаете это.
Конечно, все, что явно указано в документации, превосходит это правило.
Другое дело, что когда вы имеете дело с функцией C, правило NARC все еще применяется, но также получает правило Create: если функция содержит "create", то вы несете ответственность за CFReleasing или освобождение возвращенных данных.
Я настоятельно рекомендую вам прочитать правила управления памятью несколько раз. Он довольно короткий и не сложный, и как только вы поймете, что в этом документе, вам больше не придется задумываться.
По сути, думайте об этом как о владельце. Когда вы создаете объект с new
, copy
или же alloc
или когда вы сохраняете объект, вы владеете этим объектом. Объект не исчезнет, пока у него есть владельцы. Когда вы закончите с объектом, вы release
это, тем самым отказываясь от вашей собственности. Когда у объекта больше нет владельцев, он может уйти и может быть освобожден. Любой объект, который вы не сделали new
, alloc
, retain
или же copy
не принадлежит вам и не может гарантировать, что вы останетесь за текущей цепочкой вызовов (т. е. можно использовать его или вернуть, но не сохранять его для дальнейшего использования).
Правило большого пальца истолкования ресурса - "Получать поздно и выпускать раньше". Это означает, что вы должны приобрести ресурс как можно позже и выпустить как можно раньше. Срок службы вашего использования должен быть как можно ниже.
Есть хороший учебник Скотта Стивенсона под названием Learn Objective-C. Он также содержит раздел об управлении памятью.