Резюме: Можете ли вы добавить в свой контрольный список все, что нужно учитывать при переходе на iOS 5? StackOverflow был неоценим, так как я работал над обновлением до iOS 5. Я обнаружил некоторые довольно простые вещи, которые я пропустил до Xcode 4.2, и мне интересно, какие другие "gotchas" могут скрываться.
Подробнее: С доставкой iOS 5 на этой неделе мне пришлось внести некоторые изменения в несколько моих приложений. Xcode 4.2 намного лучше выполняет анализ кода управления памятью из-за новой функции ARC. Обновление iOS 5 - отличный момент для обзора всего вашего кода управления памятью. Новый компилятор также обнаруживает ряд других проблем, которые раньше не компилировали компиляторы. Престижность инженерам-компиляторам Apple. Вот основные моменты, которые помогли (и многие из них также будут применяться к более ранним версиям iOS).
- Обязательно вызвать [super dealloc] в END ваших методов dealloc, а не в начале.
- В viewDidUnload, некоторые люди сообщают об ошибках, которые требуют [super viewDidUnload] для вызова в конце, а не в начале вашего viewDidUnload.
- Понимать количество учетных записей, синтезированных сеттеров, а также когда вызывать выпуск или авторекламу. Новый компилятор укажет больше проблем, чем старые компиляторы. (Я думал, что был осторожен, но, видимо, я не был достаточно осторожен.) Apple руководство по управлению памятью требуется чтение - без ярлыков.
- Это хорошая идея включить зомби при отладке (в Xcode выберите Product | Edit Scheme... и выберите схему Debug, на вкладке Diagnostics, установите флажок Включить объекты зомби). Это может помочь вам найти попытки использования зомби (объекты, которые вы больше не должны использовать).
- Инструмент "Утечки" также полезен. Запустите приложение в режиме профиля и выберите шаблон "Утечки" . В окне "Инструменты" выберите инструмент "Утечки" и установите флажок "Собирать скрытое содержимое памяти", и это поможет вам увидеть, откуда просочилась память в вашем коде.
Есть несколько вариантов и результатов, с которыми я столкнулся:
- Apple singleton pattern требуется "oneway", добавленное к объявлению типа возврата:
- (oneway void) release { }
- Возможно, вам понадобится вручную добавить "armv6" в качестве типа архитектуры в настройках сборки (и убедитесь, что для параметра "Только для сборки активной архитектуры" установлено значение "НЕТ" ).
Любые другие предложения потенциальных ловушек, которые я должен искать? Я чувствую, что мои приложения более стабильны сейчас, но я чувствовал себя довольно хорошо о них раньше.