Как удалить объект из NSMutableArray только тогда, когда счетчик сохранения достигает 0?

Я знаю, что не должен проверять или использовать continueCount, но я пытаюсь задаться вопросом, есть ли способ удалить объект из NSMutableArray только после того, как его счетчик сохранения равен 0.

По сути, я хочу добавить объекты в массив и использовать эти объекты среди других окон. Когда окно использует его, я хочу, чтобы счетчик сохранения увеличивался на 1. Когда он больше не используется, я хочу, чтобы он уменьшался. Но если какое-то окно все еще использует его, я хочу, чтобы оно было доступно для всех других окон. Когда все окна больше не используют его, я хочу, чтобы он был удален из массива и полностью выпущен.

Спасибо!


person AWF4vk    schedule 19.06.2011    source источник


Ответы (1)


Для автоматического удаления из массива при выпуске вы можете использовать связанные объекты, как описано здесь Дэйвом ДеЛонгом:
Как добавить живой объект в NSMutableArray и удалить его, когда он будет выпущен?

Но вам, вероятно, лучше использовать NSCountedSet, так как оно реализует именно то, что вам нужно. Просто отсутствует порядок элементов. Чтобы компенсировать отсутствие порядка элементов, вы можете использовать дополнительный NSMutableArray для поддержания порядка и добавления/удаления элементов в/из него синхронно с подсчитываемым набором.

person Regexident    schedule 19.06.2011
comment
Ага. Это был мой собственный вопрос. На самом деле это не решает мою проблему. На самом деле, это представляет совершенно новую проблему КВО. Если я отслеживаю массив с помощью KVO, каждый объект в этом массиве сохраняется, поэтому ничего не освобождается. Не знаю, почему. stackoverflow.com/ вопросы/6400627/ - person AWF4vk; 19.06.2011
comment
@david: Если вы не зависите от порядка элементов, используйте NSCountedSet (см. обновленный ответ). - person Regexident; 19.06.2011
comment
Проблема в том, что NS*Set не поддерживает KVO. Поэтому я не могу следить за тем, что в наборе. - person AWF4vk; 19.06.2011
comment
Хотя ни один из них не делает именно то, что вам нужно, их объединение может принести вам лучшее из обоих миров. Используйте NSMutableArray, как вы привыкли, и добавьте дополнительный NSCountedSet, который вы используете для проверки счетчиков членства (обновление/запрос при каждом добавлении/удалении из массива, что вы можете наблюдать через KVO). - person Regexident; 19.06.2011