#iphone #objective-c #release
#iPhone #objective-c #освободить
Вопрос:
Я должен что-то подтвердить. Я освобождаю свои объекты таким образом.
[lblTotalQty, lblTotalAmt, imgEmptyBag, lblEmptyBagMsg release];
разве это неправильный способ?
Пожалуйста, направьте меня.
Комментарии:
1. Ого, аккуратный, никогда не видел, чтобы кто-нибудь использовал список идентификаторов, разделенных запятыми, для отправки одного сообщения в … аккуратный.
2. То есть вы имеете в виду, что это неправильный способ. и мы не можем так поступить?
3. @Steve: было бы здорово, если бы это сработало.
Ответ №1:
Операторы запятой отбрасывают все выражения, кроме последнего, поэтому ваше утверждение фактически станет
[lblEmptyBagMsg release];
Поэтому вам не следует освобождать объекты так, как вы указали в вопросе. Делайте их по отдельности, т.Е. вызывайте release для каждого объекта отдельно.
Комментарии:
1. 1 Благодаря вам я действительно кое-чему научился, прочитав эту тему, ЛОЛ. Есть причина, по которой я никогда раньше не видел сумасшедшего списка идентификаторов, разделенных запятыми!
2. Но, Дипак, у меня есть вопрос по этому поводу. Если мы можем определять переменные и можем создавать IBOutlet, можем определять свойства и можем синтезировать, то почему мы не можем освободить таким образом?
3. Потому что я создаю IBOutlet таким образом
4. Запятая в этих случаях действует как разделитель, а не оператор ( см. Это ). Это зависит от грамматики языка, и я считаю, что Objective-C не определяет его как разделитель.
Ответ №2:
Действительно сложно сказать, о чем вы здесь спрашиваете, потому что вы не даете контекста.
Во-первых, я никогда не видел, чтобы кто-нибудь использовал список идентификаторов, разделенных запятыми, для отправки одного сообщения, как вы делаете в своем примере… но я полагаю, что это не суть вопроса.
За исключением использования пулов автоматического освобождения, отправка release
сообщения объекту является единственным способом их освобождения.
Путаница с освобождением объекта обычно больше связана с вопросом «когда», а не «как». Все знают «как» (вызов release
). Обычно возникает более важный вопрос: «когда я должен освобождать или сохранять объект».
Ответ №3:
Что касается того, как вы освобождаете объекты, отправляя сообщение о выпуске:
[myObject release];
Никогда раньше не видел синтаксиса с запятой, и кто-то предположил, что сообщение отправляется только последнему объекту (кто-нибудь может это подтвердить?)
Что касается того, когда, это долгая история, и я рекомендую вам прочитать документы Apple по этому вопросу; вы могли бы начать здесь.
По сути, вы должны отслеживать права собственности на объект, чтобы две стороны не освобождали один и тот же объект дважды или, наоборот, никогда.
Поначалу звучит громоздко, но это очень хорошая практика с точки зрения разработки программного обеспечения; Эта иерархия владения привносит значимую структуру в ваш код.
В качестве альтернативы, ЕСЛИ вы кодируете для Mac, вы можете использовать сборку мусора. Кроме того, если вы пишете для iOS 5.0 и начинаете новый проект, вы можете воспользоваться новой функциональностью ARC (автоматический подсчет ссылок), которая в основном представляет собой код ручного подсчета ссылок, автоматически генерируемый компилятором: лучшее из обоих миров.