Проблема утечки памяти с тысячами изображений на 3 изображениях - PullRequest
1 голос
/ 31 марта 2012

У меня утечка памяти из 3 UIImages, проблема в том, что я не могу просто выпустить их где-нибудь в моем коде, потому что они постоянно используются во многих местах, и я не знаю, где все это (более 20 000строк кода) поэтому мой вопрос: если, скажем, каждые 10 секунд я беру один из этих UIImages, создаю пустой UIImage заполнителя, устанавливаю, что пустое изображение UIImage должно быть исходным изображением UIImage.Отпустите оригинальный UIImage. Теперь установите исходное изображение UIImage равным заполнителю UIImage, а затем освободите заполнитель UIImage, будет ли это работать?Если я устанавливаю UIImage тысячу раз, а затем выпускаю его в самом конце, очищает ли он все данные или я должен освобождать его тысячу раз?

1 Ответ

0 голосов
/ 31 марта 2012

Я не совсем понимаю, что вы хотите сделать, но у вас все равно есть только одно решение: исправить утечку памяти. Все остальное, вероятно, просто перемещает ваши проблемы, пока все не развалится.

Поскольку у вас, похоже, есть утечки, скорее всего, вы не будете строго следовать рекомендациям Apple по управлению памятью . Очень важно, чтобы вы прочитали, поняли и повиновались этому документу, это, вероятно, самый важный документ, касающийся разработки под iOS, который вам необходимо понять. Если вы это сделаете, вы можете сохранить даже огромные проекты абсолютно без утечки памяти. Если вы этого не сделаете, вы будете в конечном итоге с утечками и сбоями.

К счастью, Apple уже может помочь вам найти множество проблем: нажмите «Анализ» в XCode и устраните все проблемы, обнаруженные статическим анализатором. За исключением нескольких редких исключений, проблемы, о которых сообщает анализатор, являются реальными проблемами, которые необходимо устранить. То же самое касается предупреждений компилятора, кстати. Ваш проект не должен выдавать ни единого предупреждения, ни одной проблемы статического анализатора, независимо от того, насколько велико ваше приложение (я могу сказать вам из личного опыта работы над приложением, в котором несколько человек лет работают, что это не только возможно, это единственный способ сохранить здравый смысл).

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

...