iPhone: Interface Builder теряет память? - PullRequest
1 голос
/ 28 апреля 2010

Я работал над проектом iPhone, где мы создали весь пользовательский интерфейс программно в коде. Теперь я собираюсь начать новый проект iPhone и подумать об использовании вместо этого Interface Builder, потому что он был рекомендован мне как очень полезный инструмент, создающий меньше головной боли, чем писать все в коде, и в целом намного быстрее (относительно времени разработки ).

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

Выполнение простого поиска в Google на самом деле не предоставляет никакой информации, доказывающей, что существуют какие-либо проблемы с утечками памяти, создаваемыми самим Интерфейсным Разработчиком.

Просматривая официальную документацию от Apple, я вижу только три вещи, о которых я должен позаботиться:

@property (nonatomic, retain) IBOutlet UIUserInterfaceElementClass *anOutlet;

"Затем вы должны либо синтезировать соответствующие методы доступа, либо реализовать их в соответствии с объявлением, и (в iPhone OS) освободить соответствующую переменную в dealloc."

- (void)viewDidUnload {
    self.anOutlet = nil;
    [super viewDidUnload];
}

Что-то, что я пропустил?

1 Ответ

4 голосов
/ 28 апреля 2010

Когда вы назначаете IBOutlet через Interface Builder, этот объект сохраняется контроллером по умолчанию (даже без явного задания свойства с помощью retain). Поэтому вам необходимо либо освободить все розетки, либо установить свойство с помощью assign.

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

...