Когда я получаю предупреждение о памяти, я выпускаю кучу объектов, хранящихся в NSMutableArray.установка объектов на ноль при освобождении NSArray
[_children release];
мне также нужно рекурсия через объекты в каком-то момент (возможно после предупреждения ает произошло), так что мне нужно проверить, если объекты все еще вокруг, что я с сравнением с нилью который ISN» t будет работать, потому что освобождение массива ничего не значит.
Я не могу пройти через массив, удаляя объекты 1-на-1 и устанавливая на нуль, потому что мне не разрешено изменять массив во время итерации.
Похоже, что мне не хватает чего-то очевидного. Я просто хочу выпустить + nil некоторые значения в массиве.
Спасибо за разъяснение. Я * был ошибочным и нашел обходное решение. Я из C++-фона, так что это не сразу стало очевидным. В вашем примере я бы предположил b == nil – Sam
Поскольку я не знаю, что вы на самом деле делаете, я не мог бы предложить лучшее решение. Если объекты в массиве являются вашими собственными классами, вы можете, конечно, переопределить метод dealloc (который вызывается, когда удержанный счетчик достигает нуля), и там сообщают другие объекты (например, делегаты или просто передают уведомление), которые вы сейчас собираетесь, так что все другие объекты могут обновить свои ссылки на вас до нуля. – Mecki
Даже в C++, если у вас есть указатель на объект, адрес, который вы держите, не будет очищен, когда сам объект был уничтожен - у вас будет неправильный указатель, точно так же, как Objective-C, когда значение удержания падает до 0 и у вас все еще есть ссылка, указывающая на то, где была выделена память ... –