50 просмотров, как вы описали звуки, как большой боров памяти. Поэтому я подозреваю, что управление памятью выгружает некоторые виды. Тогда, когда вашей программе нужны представления, их там нет, и ваша программа выйдет из строя. Сообщение об ошибке не совсем подходит, но может быть неточно сказать вам, в чем проблема.
Рассмотрите следующий возможный сценарий и посмотрите, подходит ли он для кодирования этой программы.
Для того, чтобы ОС могла управлять памятью, она может разгружать представления и перезагружать их по мере необходимости. Когда это будет сделано, вызывается методы viewDidUnload, loadView и viewDidLoad.
viewDidUnload:
Этот метод вызывается в качестве аналога метода viewDidLoad. Он вызывается во время условий с низкой памятью, когда диспетчеру просмотра необходимо освободить свой вид и любые объекты, связанные с этим видом, чтобы освободить память. Поскольку контроллеры представлений часто хранят ссылки на представления и другие объекты, связанные с представлением, вы должны использовать этот метод для отказа от владения в этих объектах, чтобы память для них могла быть восстановлена. Вы должны сделать это только для объектов, которые вы можете легко воссоздать позже, либо в методе viewDidLoad, либо из других частей вашего приложения. Вы не должны использовать этот метод для выпуска пользовательских данных или любой другой информации, которая не может быть легко воссоздана.
loadView:
Вид контроллер вызывает этот метод, когда свойство зрения требуется, но в настоящее время равна нулю. Если вы создаете свои представления вручную, вы должны переопределить этот метод и использовать его для создания своих представлений. Если вы используете Interface Builder для создания ваших представлений и инициализации контроллера представлений, то есть вы инициализируете представление с помощью метода initWithNibName: bundle: прямо устанавливаете свойства nibName и nibBundle или создаете оба представления и контроллер представления в интерфейсе Builder- то вы не должны переопределять этот метод.
Проверьте UIView класса Ссылка -
viewDidLoad:
Этот метод вызывается после того, как контроллер представления загружен связанные с ним видом в память. Этот метод вызывается независимо от того, были ли представления сохранены в файле nib или созданы программно в методе loadView. Этот метод чаще всего используется для выполнения дополнительных шагов инициализации представлений, загружаемых из файлов nib.
Возможно, вы случайно не инициализировали эти представления в своих методах init, а не в методах loadView. Если вы это сделаете, тогда, когда ОС выгрузит представление (вы увидите viewDidUnload), память, связанная с представлением, и все подпункты (все изображения и анимации) будут выгружены. Это экономит память, но когда вам понадобится одно из этих разгруженных представлений, чтобы снова появиться, loadView будет вызываться первым, если представление ранее было выгружено. Если настройка просмотра выполняется в методах init, а не в loadView, представление не будет настроено снова. Но если настройка вида выполняется в методе loadView, ее можно восстановить после того, как управление памятью выгрузит ее.
Вы пытались запустить «Анализатор», чтобы узнать, не обнаружены ли какие-либо потенциальные утечки? – 5StringRyan
@ HansGruber: Да, мы попробовали работать с утечками памяти, но мы не обнаружили утечек. Любое другое решение на том же, пожалуйста .. Спасибо. –
Анализатор и утечки - это разные инструменты. Существует статический анализатор clang, который вы можете использовать для поиска не только утечек памяти, но и других проблемных точек в коде. Рекомендуется периодически запускать его. Обратите внимание, что статический анализатор clang не работает под инструментами и не является профилирующим инструментом. Вы найдете его в меню «Продукты». «Продукты> Анализ». С другой стороны, утечки - это инструмент профилирования для мониторинга объектов, чтобы убедиться, что они не освобождены после удаления всех ссылок на объект. – Sam