Создание ГХ и объектов в Интерфейсном Разработчике - PullRequest
1 голос
/ 27 февраля 2011

В проекте с установленным значением для сборки мусора: Если я создаю экземпляр объекта в Интерфейсном Разработчике и добавляю его в XIB / NIB, нужно ли назначать этот объект какой-либо точке, чтобы избежать его сбора мусором что позаботились каким-то другим способом?

Ответы [ 2 ]

1 голос
/ 27 февраля 2011

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

0 голосов
/ 04 января 2012

Я только что построил небольшой тестовый проект. С помощью GC объект, созданный с помощью Interface Builder, собирается вскоре после этого. Таким образом, ответ на вопрос: да .

Я провел немного больше испытаний:

При классическом подсчете ссылок этого не происходит. Возможно, это то, что и следовало ожидать, но это также, вероятно, утечка памяти. Не уверен здесь. (Если нет, и содержащиеся в NIB / XIB объекты освобождаются, когда освобождается владелец файла, например, тогда это будет представлять собой существенную разницу в поведении между GC и классическим RC.)

С включенным ARC я не нашел способа сказать. Вероятно, есть какая-то функция, на которой я мог бы поставить точку останова и подождать, пока конкретный объект пролетит мимо.

Edit:

Я просмотрел документацию, и в ней достаточно ясно сказано. Пропустил тот первый раз:

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

От: Руководство по программированию ресурсов, Управление временем жизни объектов из файлов пера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...