Есть ли быстрое правило, чтобы узнать, когда выпускать переменные Objective-C? - PullRequest
1 голос
/ 18 июня 2010

Существуют ли какие-либо практические правила при работе с Objective-C, которые бы помогли мне понять, когда самое подходящее время для выпуска переменных?

Ответы [ 4 ]

11 голосов
/ 18 июня 2010

NARC! :)

Если вы вызвали метод, который содержит N ew, A lloc, R etain или C opy, то вы должны release или autorelease. В противном случае вы не трогаете его.

Конечно, все, что прямо указано в документации, превосходит это правило.

Другое дело, что когда вы имеете дело с функцией C, правило NARC все еще применяется, но также получает правило Create: если функция содержит «create», то вы несете ответственность за CFReleasing или освобождение возвращаемых данных.

6 голосов
/ 18 июня 2010

Я настоятельно рекомендую вам несколько раз прочитать правила управления памятью .Она довольно короткая и не сложная, и как только вы поймете, что в этом документе, вам больше не придется задумываться.

По сути, думайте об этом как о владельце.Когда вы создаете объект с new, copy или alloc или когда вы сохраняете объект, вы владеете этим объектом.Объект не исчезнет, ​​пока у него есть владельцы.Когда вы закончили с объектом, вы release его, таким образом, отказываетесь от владения.Когда у объекта больше нет владельцев, он может уйти и может быть освобожден.Любой объект, который вы не new, alloc, retain или copy, не принадлежит вам и не может быть гарантированно оставаться за пределами текущей цепочки вызовов (т. Е. Можно использовать его иливернуть его, но не хранить для дальнейшего использования).

1 голос
/ 18 июня 2010

Правило большого пальца для извлечения ресурса: «Получать поздно и выпускать раньше».Это означает, что вы должны приобрести ресурс как можно позже и выпустить как можно раньше.Срок службы вашего использования должен быть как можно ниже.

0 голосов
/ 18 июня 2010

Скотт Стивенсон (Scott Stevenson) предлагает хороший учебник под названием Learn Objective-C .Он также содержит раздел об управлении памятью.

...