Могут ли блоки стиля C вызывать утечку памяти?

Я работаю над приложением для создания слайд-шоу в стиле киоска. У меня есть UIScrollView , который показывает слайды, и фабричный класс, который генерирует слайды. Сами «слайды» являются подклассами UIViewController , которые загружаются из файлов XIB и настраиваются классом фабрики. В моем основном контроллере представления я настроил представление прокрутки и запустил таймер. Таймер вызывает метод "перезагрузки" каждые N секунд, который обрабатывает перезагрузку и вызов фабричного класса.

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

- (SlideViewController *)slideFromManagedObject:(Slide *)managedObject{

  NSInteger slideType = [managedObject slideType];

  switch(slideType){
     case kSlideTypeA:

  { 
       //
       //  configure arguments here
       //

       return [[SlideViewController alloc] initWithArgument:argument] autorelease];
         break;

  }

    //
    //  More types here...
    //

    default:
      break;
  }


}

Я еще не дошел до сути определения всех моих случаев, но те, которые заполнены, похоже, вызывают скачки в использовании памяти . Если я добавлю return [[[UIViewController alloc] init] autorelease]; прямо перед переключателем / случаем, я не получу видимого изображения, как и ожидалось, но я также не вижу увеличения объема памяти. Я не уверен, но подозреваю, что это «блоки C», в которые я заключаю свой код генерации слайдов.

Некоторые моменты, на которые следует обратить внимание:

  • Когда приложение запускается, я вижу плато памяти примерно с 400 килобайт, что примерно вдвое больше. Затем, по мере продвижения слайдов, вызывается любой из слайдов, код генерации которых заключен в фигурные скобки, и плато памяти снова поднимается вверх.

  • Такое поведение, кажется, происходит только один раз за запуск - когда приложение перебирает все слайды, плато to_not_ повторяется снова. Однако , если приложение запускается в фоновом режиме, а затем перезапускается, плато все же возникает снова, потребляя даже больше памяти.

  • Когда я оставил приложение работать на ночь, примерно на 10 часов и За сорок минут использование памяти медленно поднялось с 1,44 мегабайта до примерно 1,57 мегабайта. Я подозреваю, что есть / были некоторые другие утечки, которые, возможно, были исправлены моей настройкой, но основной скачок примерно с 800 килобайт до где-то между 1,4 и 1,5 мегабайта все еще остается проблемой.

Instruments не сообщает о каких-либо утечках. , но меня беспокоит плато.

Что могло быть причиной увеличения памяти?

РЕДАКТИРОВАТЬ:

Поэтому я не думаю, что дело в блоках, поскольку использование if / else, похоже, делает то же самое. Вот скриншот работающего инструмента Allocations:

enter image description here

Где могли храниться эти представления?

6
задан Community 23 May 2017 в 12:11
поделиться