Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
Друсс
0 / 0 / 0
Регистрация: 01.01.2013
Сообщений: 5
#1

Приложение вылетает, сообщая о нехватке памяти - Objective-C

18.05.2014, 18:28. Просмотров 898. Ответов 7
Метки нет (Все метки)

Признаться, я долгое время искал решение своей проблемы сам и во многом ее решил, однако вылеты все же продолжаются... В итоге решил таки обратиться к сообществу братьев-программистов ))

Итак, приложение над которым я работаю очень большое, приводить его тут не вижу смысла.
В общих чертах:
1. Приложение как бы модульное, т.е. существует несколько ViewController'ов (модулей), которые сменяют друг друга по требованию.
2. Приложение НЕ использует StoryBoard.
3. Приложение использует огромное кол-во изображений, по сути это презентация с элементами каталога. Основные классы, которые используются:
- UIScrollView - используется в навигации, как верикальной, так и горизонтальной в рамках вертикальных блоков;
- UIWebView - отображение сложных таблиц (всего чуть более 100 таблиц в разных UIView внутри UIScrollView), все HTML файлы локальные;
- UIImageView - отображение всех изображений. Тут я использую, как и кеширование, так и воздерживаюсь от него, в зависимости от частоты использования изображений;
- UIImageView.animationImages - это используется часто, и скорей всего именно тут кроется ошибка, смотрите далее...
4. Приложение работает как на 1024x768, так и на 2048x1536. Все изображения изначально для большого разрешения, но если приложение запускается на ipad2 (mini), то все уменьшается вдвое, использую стандартные средства Objective-C (CGRectMake).

Суть ошибки: приложение вылетает, сообщая о нехватке памяти. По сути не сообщая конкретного места, но я понимаю, что это именно из-за этого (слежу за использованием памяти). Локализовать конкретный момент невозможно, так как вылетает всегда в разных местах, но ТОЛЬКО после использования UIView, где располагались множественные UIImageVIew.animationImages, которых около 26 штук на одной UIView (всего анимаций около 100). В каждом сиквенсе запускалось около 40 изображений, размером 600 на 600. В общем много...

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

Ваше мнение? Куда следует направить совй взор?
Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2014, 18:28     Приложение вылетает, сообщая о нехватке памяти
Посмотрите здесь:
Objective-C Приложение вылетает при запуске
Android Вылетает очень важное приложение из-за нехватки памяти
Регулярно сообщение о нехватке виртуальной памяти. Посоветуйте :о) Windows XP
C++ проверьте пожалуйста , выбивает ошибку о нехватке памяти
Windows 8, 8.1 После обновления Windows 8.1 не работает хамачи и рапортует о нехватке памяти
Вылетает приложение Android
Android Вылетает приложение
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
19.05.2014, 20:19     Приложение вылетает, сообщая о нехватке памяти #2
Приложение использует огромное кол-во изображений, по сути это презентация с элементами каталога. Основные классы, которые используются:
- UIScrollView - используется в навигации, как верикальной, так и горизонтальной в рамках вертикальных блоков;
Горизонтальная таблица не?
https://github.com/alekseyn/EasyTableView
Друсс
0 / 0 / 0
Регистрация: 01.01.2013
Сообщений: 5
19.05.2014, 20:32  [ТС]     Приложение вылетает, сообщая о нехватке памяти #3
Нет. У меня свои механизмы. UIView последовательно на UIScrollView. Собственно все банально и просто
Примечательно, что при навигации я не держу в памяти "окна", которые больше, чем в шаге от текущей позиции, как по вертикали, так и по горизонтали.
Освобождаю объекты путем removeFromSuperview рекурсивно для всех child объектов - надеюсь, что этого достаточно.
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
19.05.2014, 21:39     Приложение вылетает, сообщая о нехватке памяти #4
Нет. У меня свои механизмы. UIView последовательно на UIScrollView. Собственно все банально и просто
Примечательно, что при навигации я не держу в памяти "окна", которые больше, чем в шаге от текущей позиции, как по вертикали, так и по горизонтали.
Освобождаю объекты путем removeFromSuperview рекурсивно для всех child объектов - надеюсь, что этого достаточно.
велосипедостроение приводит в тупик и к осознанию убогости архитектуры.
Друсс
0 / 0 / 0
Регистрация: 01.01.2013
Сообщений: 5
19.05.2014, 22:32  [ТС]     Приложение вылетает, сообщая о нехватке памяти #5
... Велосипеды не строю, просто люблю некоторые вещи делать сам. Не вижу в этом ничего плохого ...
Да и вообще, проблема скрей всего не в этом
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
20.05.2014, 07:04     Приложение вылетает, сообщая о нехватке памяти #6
в любом с случае от вас никакой конкретики нет. так что разобраться видимо не получиться.
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
21.05.2014, 08:38     Приложение вылетает, сообщая о нехватке памяти #7
Цитата Сообщение от Друсс Посмотреть сообщение
Нет. У меня свои механизмы. UIView последовательно на UIScrollView. Собственно все банально и просто
Примечательно, что при навигации я не держу в памяти "окна", которые больше, чем в шаге от текущей позиции, как по вертикали, так и по горизонтали.
UICollectionView не?
Цитата Сообщение от Друсс Посмотреть сообщение
Рассчитывая на ARC, мы не думаем о том, как расходуется память
Кто вам сказал такую глупость?
Цитата Сообщение от Друсс Посмотреть сообщение
4. Приложение работает как на 1024x768, так и на 2048x1536. Все изображения изначально для большого разрешения, но если приложение запускается на ipad2 (mini), то все уменьшается вдвое, использую стандартные средства Objective-C (CGRectMake).
Для неретина разрешений следует использовать картинки соответствующего разрешения именно из соображений экономии памяти, ибо на неретина девайсах ее как правило меньше. При чем здесь CGRectMake, я не понял.
Цитата Сообщение от Друсс Посмотреть сообщение
у меня сложилось впечаетление, что мои вылеты происходят тогда, когда приложение требует больше памяти, чем есть и чем освободилось на конкретный момент времени, после чего происходит вылет.
Впечатления не есть подход инженера, пробовали хотя бы посмотреть что и сколько памяти жрет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2014, 09:29     Приложение вылетает, сообщая о нехватке памяти
Еще ссылки по теме:
Вылетает при удалении памяти C++
Вылетает приложение из simulator
Android Вылетает созданное приложение
Вылетает сетевое приложение Android
C# Приложение полностью вылетает

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
21.05.2014, 09:29     Приложение вылетает, сообщая о нехватке памяти #8

Не по теме:

Цитата Сообщение от Друсс Посмотреть сообщение
Рассчитывая на ARC, мы не думаем о том, как расходуется память, но... у меня сложилось впечаетление, что мои вылеты происходят тогда, когда приложение требует больше памяти, чем есть и чем освободилось на конкретный момент времени, после чего происходит вылет.
Низкий вам поклон. Увеличиваю свою ставку в час.


Цитата Сообщение от Друсс Посмотреть сообщение
В каждом сиквенсе запускалось около 40 изображений, размером 600 на 600. В общем много...
Ну так возьмите и посчитайте сколько это в байтах... И сразу увидите где собака порылась.
Yandex
Объявления
21.05.2014, 09:29     Приложение вылетает, сообщая о нехватке памяти
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru