Базовый текст иногда не дает результатов [iOS]

Я помогаю компании с проектом для iOS, в котором используется Core Text. Некоторые пользователи приложения сообщают, что текст иногда отсутствует в приложении. Кажется™, что это отчасти связано с памятью, потому что это можно решить, закрыв приложение вместе с фоновыми приложениями.

Я сделал несколько строк кода, которые имитируют использование приложения — поэтому приложение «запускается само», перемещаясь между контроллерами представления в случайном порядке, прокручивая текстовые поля и т. д. — чтобы отслеживать, возникает ли эта проблема при обычном использовании.

Я обнаружил несколько утечек памяти, связанных с использованием Core Text, но, по данным инструментов, объем потерянной памяти довольно низок. Однако, когда симуляция работает около 20 минут или около того, ОС закрывает приложение из-за предупреждений о памяти.

Я намерен исправить эту утечку памяти, но моя проблема в том, что я не смогу гарантировать, что это исправит основную ошибку (отсутствующий текст), так как я не могу воспроизвести ее сам.

Итак, мой последний вопрос: у кого-нибудь возникали проблемы с отсутствующим текстом на iOS при использовании Core Text из-за утечки памяти? Звучит правдоподобно? Если да, то относится ли это только к определенным версиям iOS?

Я ценю любые ответы, которые могут мне помочь!


person Jonas    schedule 07.03.2012    source источник


Ответы (1)


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

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

person MrTJ    schedule 07.03.2012
comment
Спасибо за ответ. Это довольно странно, я думаю. Если эти утечки вызывают проблему у некоторых пользователей, почему у них приложение не падает (но текст пустой), а у меня работает (и я никогда не вижу пустой текст)? Какие-либо предложения? - person Jonas; 07.03.2012
comment
Я не знаю точно, как работает управление памятью в iOS, но могу представить такой сценарий: 1) Ваше приложение потребляет слишком много памяти. ОС отправляет уведомления в ваше приложение / UIViewControllers 2) UIViewControllers fw уменьшает объем своей памяти, например, освобождая некоторые ресурсы пользовательского интерфейса (пустой текстовый вид) 3) вы по-прежнему потребляете слишком много памяти 4) если нет других запущенных приложений, ОС может даже оставить ваше приложение работающим 5) если есть другие приложения, которым требуется память, ОС может рассмотреть возможность сделать более радикальный шаг и убить ваш процесс. - person MrTJ; 07.03.2012
comment
Таким образом, это зависит от ситуации, как и другие загруженные приложения, какова гибкость ОС между предупреждением о памяти и сигналом об уничтожении, сколько памяти вы освобождаете после первого предупреждения и т. д. - person MrTJ; 07.03.2012
comment
Да, я предполагаю, что сложный характер управления памятью в iOS может создавать очень разные сценарии на моем устройстве и устройствах других пользователей. Я предполагаю, что лучший подход - исправить утечки памяти, а затем просто надеяться на лучшее, что он также устраняет проблему с отсутствующим текстом. Еще раз спасибо за ваш ответ. - person Jonas; 07.03.2012
comment
Вы можете поблагодарить мой ответ, приняв его, нажав на галочку и проголосовав за него, нажав на стрелку вверх :) Надеюсь, вы найдете причину своих проблем, невоспроизводимые или недетерминированные ошибки являются одними из самых уродливых вещей в разработке программного обеспечения. . - person MrTJ; 07.03.2012