Подтвердить что ты не робот

Что следует учитывать при переходе на iOS 5

Резюме: Можете ли вы добавить в свой контрольный список все, что нужно учитывать при переходе на 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 { }

Любые другие предложения потенциальных ловушек, которые я должен искать? Я чувствую, что мои приложения более стабильны сейчас, но я чувствовал себя довольно хорошо о них раньше.

4b9b3361

Ответ 1

1/Модальные контроллеры ведут себя по-другому, если вы меняете свой размер. Если вам требуется модальное диалоговое окно другого размера, подумайте о том, как использовать контроллеры детского представления iOS 5.

2/Для таблицы, если вы возвращали заголовок секции nil и положительную высоту, в iOS 4 заголовок был скрыт. В iOS 5 вам нужно вернуть нулевую высоту для заголовков nil.

3/UDID устарел. Вы можете использовать CFUUIDCreate для создания уникального идентификатора и сохранения его в своих настройках, но имейте в виду, что данные устройства могут быть скопированы, а затем восстановлены на другое устройство, оставив вам два устройства с одним и тем же идентификатором. Я решил ситуацию, сохранив свой идентификатор в цепочке ключей с атрибутом kSecAttrAccessibleWhenUnlockedThisDeviceOnly.

О вашем списке: [super viewDidUnload] должен всегда вызываться как последний оператор в вашем представленииDidUnload. Логика такая же, как и в [super dealloc]. Обратите внимание, что вы также должны называть [self viewDidUnload] в вашем dealloc (если вы еще не выпускаете там свою память), потому что он не называется неявно (хотя иногда это так).

Из моих экспериментов обнаружение утечки в Инструментах не сообщает о утечках свойств, которые синтезируются без присвоения имени свойства.