Сокращенный способ высвобождения всех сохраненных свойств? - PullRequest
2 голосов
/ 17 февраля 2011

Мы все знаем, что свойства объекта должны быть освобождены с помощью метода dealloc, но часто для объектов со многими свойствами это может быть довольно громоздким.Это своего рода головная боль, особенно при добавлении или удалении новых свойств, чтобы не забыть вернуться к dealloc, добавить и удалить вызовы release.

Существует ли какой-либо метод освобождения всех свойств объекта в целом?Я не смог ничего найти, просматривая документы, но можно ли это сделать с помощью размышлений, если это еще не реализовано?

Полагаю, еще один простой вариант - разместить все свойства в массиве или другом объекте контейнера и всегда просто освободить контейнер.Любые другие варианты?

Ответы [ 2 ]

1 голос
/ 10 марта 2011

Я видел один раз (и даже использовал его).Он включает использование Objective-C Runtime для циклического просмотра свойств класса, проверки, какие из них имеют флаг retain или copy, а затем установки их на nil.Тогда ваша -dealloc реализация может быть уменьшена до чего-то вроде [self cleanupProperties] или чего-то еще.

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

Итак, в ответ на ваш вопрос: это определенновозможно, но я бы посоветовал вам нет.Используйте сборку мусора, если это возможно!:)

0 голосов
/ 17 февраля 2011

Если вы не можете включить сборку мусора, у вас есть почти два варианта. Как вы и предполагали, вы можете сложить все ссылки на свойства в один NSDictionary (который вы выпустите в -dealloc). В противном случае вы застряли на том, как обычно это делается.

Подробнее о сборке мусора вы можете узнать в Objective-C 2.0 здесь .

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