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

Objective-C

Войти
Регистрация
Восстановить пароль
 
smth
177 / 46 / 6
Регистрация: 23.06.2011
Сообщений: 247
#1

Не освобождается память после unwind segue - Objective-C

18.03.2016, 21:12. Просмотров 447. Ответов 2

Здравствуйте! Объясните, пожалуйста, как правильно решить следующую проблему:

Есть тестовое приложение с двумя экранами
UINavigationController --> Экран 1 (UIViewController) --(show)--> Экран 2 (UITableViewController)

На экране 1 всего одна кнопка (для перехода на экран 2), т.е. при запуске приложения памяти используется по-минимуму. На экране 2 - таблица из 10 строк (создаются с помощью PrototypeCell), в каждой ячейке одно и тоже - UIStackView с тремя UIImageView (StackView просто для удобства кинул). Картинки грузятся из "MainBundle" программы (в реальном приложении - с сервера, но характер проблемы от этого не меняется). После появления второго экрана использование памяти взлетает до +-140МБ (в приложенном примере). Картинки добавляются без уменьшения, чтобы использование памяти было более заметным. По нажатию на кнопку "Назад" в строке навигации экран 2 пропадает и возвращается экран 1. По идее (как я всегда понимал Navigation Stack), если не накосячить со strong ссылками, все локальные объекты, используемые экраном 2, должны освобождаться ARC. Тем не менее, после исчезновения экрана 2 используемая память все также остается равна +-140МБ. Через Instruments я вижу, что память выделена картинкам, но как ее очистить - не пойму.

Код создания ячейки таблицы:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
    
    UIStackView *stv = [cell viewWithTag:101];
    
    UIImageView *v1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"img1.jpg"]];
    [v1.heightAnchor constraintEqualToConstant:60].active = true;
    [v1.widthAnchor constraintEqualToConstant:60].active = true;
    [stv addArrangedSubview:v1];
    
    UIImageView *v2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"img2.jpg"]];
    [v2.heightAnchor constraintEqualToConstant:60].active = true;
    [v2.widthAnchor constraintEqualToConstant:60].active = true;
    [stv addArrangedSubview:v2];
    
    UIImageView *v3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"img3.jpg"]];
    [v3.heightAnchor constraintEqualToConstant:60].active = true;
    [v3.widthAnchor constraintEqualToConstant:60].active = true;
    [stv addArrangedSubview:v3];
    
    return cell;
}
Во вложении рабочий пример (XCode 7.2.1, iOS 9)
Вложения
Тип файла: zip test.zip (6.65 Мб, 0 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2016, 21:12     Не освобождается память после unwind segue
Посмотрите здесь:
Передача данных segue Objective-C
Visual Basic После Set Exl = Nothing память не освобождается
SQL Server Оперативная память не освобождается после обслуживания MSSQL 2008 R2
VBA Медленно освобождается память после закрытия источника данных
Освобождается ли память выделенная под список и массив после завершения работы метода? C#
C++ Не освобождается память
C++ Освобождается ли память?
Не освобождается оперативная память
Память освобождается не полностью C++
C (СИ) Не освобождается память от malloc
Почему память массива не освобождается? C++
Память освобождается, но значение остается C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cin_cout
26 / 26 / 7
Регистрация: 06.10.2012
Сообщений: 119
18.03.2016, 23:28     Не освобождается память после unwind segue #2
Тут ответ:
https://developer.apple.com/library/...atingData.html
smth
177 / 46 / 6
Регистрация: 23.06.2011
Сообщений: 247
19.03.2016, 14:12  [ТС]     Не освобождается память после unwind segue #3
cin_cout, я не отношусь к тому типу людей, которые лезут писать вопрос, не пытаясь разобраться самостоятельно. Материалы по приведенной ссылке никаким образом не связаны с решением проблемы в примере.

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

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

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