Управление памятью Objective C - лучшие практики при возврате объектов?

Ваша разметка недействительна. Блочный элемент, такой как <div>, не может быть дочерним по отношению к <tr>; единственными действительными элементами в этом контексте являются <td> и <th>.

В Google Chrome эта разметка переосмыслена для размещения элементов <div> в корне тела документа, например

.
<div class="mobileHide"></div>
<div class="mobileHide"></div>
<table>
  <tr>
    <td>
      This cell is meant to be 20% wide on PC but non-existent on mobile.
    </td>
    <td>
      This cell is meant to be 60% wide on PC and 100% wide on mobile.
    </td>
    <td>
      This cell is meant to be 20% wide on PC but non-existent on mobile.
    </td>
  </tr>
</table>

Если вы хотите скрыть ячейки таблицы на мобильных устройствах, примените класс mobileHide непосредственно к ячейкам таблицы.

12
задан Sam Lee 28 March 2009 в 03:13
поделиться

3 ответа

Необходимо провести некоторое время, читая Руководство по программированию управления памятью для Какао.

Короткое - то, что, если Вы добираетесь, Ваша ссылка через метод запускается с 'выделения' или 'новый' или содержит 'копию', Вы владеете ссылкой и не должны сохранять ее. Вы действительно имеете, предусматривают его выпуск, или посредством прямого выпуска или посредством использования автовыпуска.

Если Вы получаете ссылку какой-либо другой путь (через метод класса или what-have-you), Вы не владеете ссылкой, таким образом, Вы не должны выпускать. Если Вы хотите сохранить ссылку, необходимо сохранить ее.

В целом, это действительно довольно просто и эффективно.

12
ответ дан 2 December 2019 в 20:19
поделиться

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

Иначе Вы ответственны за выпуск (или автовыпуск) любой объект, который Вы выделяете. Первым примером является корректный способ сделать большинство вещей.

Функция вызова должна сохранить значение, если это хочет, чтобы это сохранилось мимо объема функций, но это затем ответственно за выпуск его в некоторой более поздней точке.

2
ответ дан 2 December 2019 в 20:19
поделиться

Хм...

Обычно, я следую за этим "путем".

+ (id)MyObj {
  return [[[MyObj alloc] init] autorelease];
}

Выпуская объект до возврата его, объект будет освобожден, прежде чем он достигнет вызывающего объекта. Это произведет ошибку. Избегайте этой ошибки при помощи пула автовыпуска вместо этого. Первоначально представленный мне Scott Stevenson из Theocacao. Это его и многие, предпочтенный путь к Obj-C 1.0.

2
ответ дан 2 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: