iPhone / iPad - помогите освободить немного памяти - PullRequest
0 голосов
/ 21 июля 2010

У меня проблема с памятью, которую я не могу исправить.То, что я делаю, это:

У меня есть ViewController, который выглядит как книга с 7 различными вкладками.Каждый раз, когда пользователь нажимает на вкладку, содержимое «страницы» изменяется, а фоновое изображение изменяется, чтобы отразить другую выбранную вкладку.Каждое фоновое изображение имеет размер 768x1024 и по одному для каждой из 7 вкладок.

Моя проблема в том, что при выборе каждой вкладки память никогда не высвобождается для предыдущего изображения, и после выбора 7 вкладок у меня используется что-то вроде 30 МБ для 7 различных изображений.У меня есть 7 различных методов для каждой из 7 вкладок, которые нажимает пользователь.

-(IBAction) pressedTab1 {

    self.tabsImageView.image = nil; //tabsImageView is the imageView I am keeping he background image in.
    UIImage *tempUIImage = [UIImage imageNamed:@"tab1selected.png"]; 

    self.tabsImageView.image = tempUIImage;


}

Ответы [ 2 ]

1 голос
/ 21 июля 2010

В опубликованном вами коде нет утечки. Когда вы нажали все 7 вкладок, ваше приложение достигает 30 МБ памяти. Но что произойдет, если вы продолжите переключаться между вкладками? Это продолжает увеличиваться в каждом переключателе? Если да, то у вас точно есть утечка в какой-то другой части. Если нет (то есть память более или менее постоянна 30 МБ), то это может не быть проблемой вообще. Иногда система не освобождает вещи до тех пор, пока не потребуется память и 30 МБ приемлемы. Это может также кэшировать данные изображения. Вам не нужно беспокоиться в этом случае. Хотя я не обнаружил в Apple doc эту функцию, я столкнулся с подобным сценарием.

Помимо вашего первоначального вопроса, вам следует избегать таких больших изображений (768x1024 пикселей). Это может вызвать огромную проблему, по крайней мере, в бюджетных устройствах.

1 голос
/ 21 июля 2010

Вы можете просто назначить изображение напрямую, как это. А поскольку [UIImage imageNamed ...] является автоматическим выпуском, память будет обработана для вас.

-(IBAction) pressedTab1 {
  self.tabsImageView.image = [UIImage imageNamed:@"tab1selected.png"];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...