Форум программистов, компьютерный форум, киберфорум
Наши страницы

Objective-C

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

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

18.05.2014, 18:28. Просмотров 925. Ответов 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, мы не думаем о том, как расходуется память, но... у меня сложилось впечаетление, что мои вылеты происходят тогда, когда приложение требует больше памяти, чем есть и чем освободилось на конкретный момент времени, после чего происходит вылет.

Ваше мнение? Куда следует направить совй взор?
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2014, 18:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приложение вылетает, сообщая о нехватке памяти (Objective-C):

Вылетает приложение из simulator - Программирование iOS
Пожалуйста, скажите. Почему после того как я собрал приложение для iPhone, начинаю его запускать в simulator, там появляется темный экран и...

Приложение вылетает при запуске - Objective-C
Всем привет. Прошу сильно камнями не бросать, только-только начал изучать Objective-C и столкнулся с такой проблемой. При запуске...

Вылетает приложение с Google AdMob - Программирование iOS
Доброго времени суток, разработчики! Пытаюсь встроить рекламу Google AdMob в приложении. (т.к. понял что iAd вообще не будет...

Вылетает очень важное приложение из-за нехватки памяти - Android
На смартфоне с андроидом версии 4.0 вылетает очень важное приложение, свернутое в фоновый режим, при одновременном использовании с...

Регулярно сообщение о нехватке виртуальной памяти. Посоветуйте :о) - Windows XP
Регулярно появляется сообщение о нехватке виртуальной памяти. С чем это связано. Как решить проблему? Подскажите пож-ста - буду очень...

проверьте пожалуйста , выбивает ошибку о нехватке памяти - C++
#include <conio.h> #include <iostream.h> #include <string.h> #include <math.h> int X; void Zamena(char B) { switch...

7
noname_club
103 / 94 / 10
Регистрация: 01.05.2013
Сообщений: 598
19.05.2014, 20:19 #2
Приложение использует огромное кол-во изображений, по сути это презентация с элементами каталога. Основные классы, которые используются:
- UIScrollView - используется в навигации, как верикальной, так и горизонтальной в рамках вертикальных блоков;
Горизонтальная таблица не?
https://github.com/alekseyn/EasyTableView
0
Друсс
0 / 0 / 0
Регистрация: 01.01.2013
Сообщений: 5
19.05.2014, 20:32  [ТС] #3
Нет. У меня свои механизмы. UIView последовательно на UIScrollView. Собственно все банально и просто
Примечательно, что при навигации я не держу в памяти "окна", которые больше, чем в шаге от текущей позиции, как по вертикали, так и по горизонтали.
Освобождаю объекты путем removeFromSuperview рекурсивно для всех child объектов - надеюсь, что этого достаточно.
0
noname_club
103 / 94 / 10
Регистрация: 01.05.2013
Сообщений: 598
19.05.2014, 21:39 #4
Нет. У меня свои механизмы. UIView последовательно на UIScrollView. Собственно все банально и просто
Примечательно, что при навигации я не держу в памяти "окна", которые больше, чем в шаге от текущей позиции, как по вертикали, так и по горизонтали.
Освобождаю объекты путем removeFromSuperview рекурсивно для всех child объектов - надеюсь, что этого достаточно.
велосипедостроение приводит в тупик и к осознанию убогости архитектуры.
0
Друсс
0 / 0 / 0
Регистрация: 01.01.2013
Сообщений: 5
19.05.2014, 22:32  [ТС] #5
... Велосипеды не строю, просто люблю некоторые вещи делать сам. Не вижу в этом ничего плохого ...
Да и вообще, проблема скрей всего не в этом
0
noname_club
103 / 94 / 10
Регистрация: 01.05.2013
Сообщений: 598
20.05.2014, 07:04 #6
в любом с случае от вас никакой конкретики нет. так что разобраться видимо не получиться.
0
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, я не понял.
Цитата Сообщение от Друсс Посмотреть сообщение
у меня сложилось впечаетление, что мои вылеты происходят тогда, когда приложение требует больше памяти, чем есть и чем освободилось на конкретный момент времени, после чего происходит вылет.
Впечатления не есть подход инженера, пробовали хотя бы посмотреть что и сколько памяти жрет?
0
zulkis
683 / 610 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
21.05.2014, 09:29 #8

Не по теме:

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


Цитата Сообщение от Друсс Посмотреть сообщение
В каждом сиквенсе запускалось около 40 изображений, размером 600 на 600. В общем много...
Ну так возьмите и посчитайте сколько это в байтах... И сразу увидите где собака порылась.
0
21.05.2014, 09:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2014, 09:29
Привет! Вот еще темы с ответами:

После обновления Windows 8.1 не работает хамачи и рапортует о нехватке памяти - Windows 8, 8.1
Обновил систему, у меня лицуха, обновилось чисто и без грязи. 1) перестал работать хамачи (переустанавливал, в реестре лазил, и прочий...

Вылетает приложение - Программирование Android
Вылетает при работе кода в кнопке sobr! package com.example.stracking; import android.app.Activity; import...

Вылетает приложение - Программирование Android
вылетает не знаю почему, помогите пожалуйста package com.example.stracking; import android.app.Activity; import...

Вылетает при удалении памяти - C++
У меня тут конфуз: class InversTree { struct element { double data; element *parent; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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