Нужно ли делегату приложения для iOS сохранять UIWindow? - PullRequest
5 голосов
/ 17 августа 2011

В шаблонах Xcode для приложений iOS, таких как «Просмотреть приложение на основе», создается перо MainWindow, содержащее три объекта верхнего уровня: Делегат приложения, Окно и основной контроллер представления.Делегат приложения определяет retain выходы / средства доступа для окна и контроллера представления.Я не понимаю, почему App Delegate должен был бы сохранять эти объекты, поскольку они уже являются объектами верхнего уровня в nib и, следовательно, должны были быть сохранены UIApplication.При проверке retainCount этих объектов достаточно указать 1 для делегата приложения и 2 для контроллера окна и представления.Могу ли я / я должен поменять их на assign вместо этого?

Я знаю, что это мелочь, но я надеюсь, что понимание того, почему это сделано, улучшит мое общее понимание управления памятью в iOS.

1 Ответ

1 голос
/ 17 августа 2011

Назначить сложно в iOS с выходами, которые я использую @property (nonatomic, retain). В отличие от Mac OS, подключенные выходы к объектам XIB в iOS не сохраняются автоматически и не управляют памятью, это может измениться в iOS 5, но несколько маловероятно.

Смысл в том, что вы можете освободить любые объекты представления в - (void) viewDidUnload и избавиться от любых представлений, которые вам либо не нужны, либо могут повторно инициализировать - - (void) viewWillAppear. Но цель, якобы, состоит в том, чтобы держать вас под контролем, что собрано, а что нет.

Мой шаблон состоит в том, чтобы просто объявить для них обычные методы доступа к какао, как и для любых других свойств, и установить для них значение nil в viewDidUnload

- (void)viewDidUnload
{
    [super viewDidUnload];
    self.buttonOne = nil;
    self.buttonTwo = nil;
    self.buttonThree = nil;
    self.buttonFour = nil;
    self.buttonFive = nil;
    self.buttonSix = nil;
    self.lineWidthSlider = nil;
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

Вы правы, однако в том смысле, что не имеет особого смысла иметь удержание для окна, но имеет смысл для последовательности ИМХО. Столь изнурительный способ сказать «да», по моему опыту, делегат приложения должен сохранить UIWindow, или он может быть собран в процессе очистки памяти и вызвать несколько случайных сбоев.

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