Текущий способ освободить память из UIScrollview со многими изображениями - PullRequest
0 голосов
/ 31 августа 2010

Я создаю простой scrollView с некоторыми изображениями, прикрепленными к кнопкам. Это прекрасно работает, за исключением того факта, что это представление прокрутки занимает довольно много памяти.

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

Не могли бы вы помочь мне разобраться в этой проблеме и освободить этот огромный блок памяти, когда он не нужен

int flipFlop = 1;
masksAvailable = 18;
float topMaskXX = 85.0;
float topMaskYY = 96.0;
UIButton *button;
for (int buttonsLoop = 1;buttonsLoop < masksAvailable+1;buttonsLoop++){


  button = [UIButton buttonWithType:UIButtonTypeCustom];
  NSString *tempname = [NSString stringWithFormat:@"mask_frame%i.png",buttonsLoop];

  // This fellow there is the memory eating monster
  [button setBackgroundImage:[UIImage imageNamed:tempname] forState:UIControlStateNormal];

  tempname = nil;

  button.tag = buttonsLoop;
  [button addTarget:self action:@selector(handleMaskKeys:) forControlEvents:UIControlEventTouchUpInside];


  UIImageView *frameForSubImages = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image_frame.png"]];
  frameForSubImages.frame = CGRectMake(0.0, 0.0, 320.0/2.9, 480.0/2.9);
  frameForSubImages.center = CGPointMake(topMaskXX,topMaskYY);
  [scrollView addSubview:frameForSubImages];


  button.frame = CGRectMake(0.0, 0.0, 320.0/3.4, 480.0/3.4);
  button.center = CGPointMake(topMaskXX,topMaskYY);
  if (flipFlop == 1){
   topMaskXX += 150;
  } else {
   topMaskYY += 185.0;
   topMaskXX = 85.0;

  }
  flipFlop = flipFlop * -1;
  [scrollView addSubview:button];






}

1 Ответ

0 голосов
/ 31 августа 2010

Прежде всего, я хотел бы предложить вам выполнить «Очистить все» и «Построить и проанализировать» свой проект. Очень хорошо указывает на проблемы с сохранением / выпуском.

Во-вторых, любой класс, в котором хранятся объекты, должен определять "dealloc", который освобождает эти объекты, чтобы они были удалены при освобождении объекта.

-(void) dealloc {
    // release all retained objects here.

    [super dealloc];
}

В-третьих, в приведенном выше примере это также выглядит так, как будто frameForSubImages может иметь дополнительное удержание, поскольку вы выделили его (+1 ссылка) и присвоили его представлению (+1 ссылка), даже не вызывая релиз (это будет -1 ссылка и оставит вас с пересчетом 1).

Наконец, я бы также рекомендовал прочитать Руководство по программированию управления памятью для iOS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...