На что следует обращать внимание при переходе на iOS 5 - PullRequest
28 голосов
/ 15 октября 2011

Сводка: Можете ли вы добавить в мой контрольный список вещей, на которые следует обратить внимание при переходе на iOS 5? StackOverflow был неоценим, поскольку я работал над обновлением до iOS 5. Я обнаружил некоторые довольно простые вещи, которые я пропустил до Xcode 4.2, и мне интересно, что могут скрывать другие «ошибки».

Подробно: С выходом iOS 5 на этой неделе мне пришлось внести некоторые изменения в пару моих приложений. Xcode 4.2 значительно лучше выполняет анализ кода управления памятью благодаря новой функции ARC. Обновление iOS 5 является отличным моментом для проверки всего кода управления памятью. Новый компилятор также обнаруживает ряд других проблем, которые пропустили более ранние компиляторы. Слава инженерам компилятора Apple. Вот основные вещи, которые помогли (и многие из них также применимы к более ранним версиям iOS).

  1. Обязательно вызовите [super dealloc] в КОНЦЕ ваших методов dealloc , а не в начале.
  2. В viewDidUnload некоторые люди сообщали об ошибках, которые требуют, чтобы [super viewDidUnload] вызывался в конце , а не в начале вашего viewDidUnload.
  3. Понимать, сохранять счетчики, синтезированные сеттеры и когда вызывать релиз или авто-релиз. Новый компилятор укажет больше проблем, чем старые компиляторы. (Я думал, что был осторожен, но, видимо, я не был достаточно осторожен.) Руководство по управлению памятью от Apple необходимо прочитать - ярлыки не нужны.
  4. Рекомендуется включить зомби при отладке (в Xcode выберите Product | Edit Scheme ... и выберите схему отладки; на вкладке Diagnostics установите флажок Enable Zombie Objects). Это может помочь вам найти попытки использования зомби (объекты, которые вы больше не должны использовать).
  5. Инструмент утечки также полезен. Запустите ваше приложение в режиме профиля и выберите шаблон Leaks. В окне «Инструменты» выберите инструмент «Утечки» и установите флажок «Сбор содержимого утечки памяти», и он поможет вам понять, откуда произошла утечка памяти в вашем коде.

Я столкнулся с несколькими трудностями:

  • Шаблон Apple singleton нуждается в "одностороннем" добавлении к объявлению возвращаемого типа:
    - (<b>oneway</b> void) release { }

Какие-нибудь другие предложения потенциальных ловушек я должен искать? У меня такое ощущение, что мои приложения теперь более стабильны, но раньше я чувствовал себя к ним довольно хорошо.

1 Ответ

6 голосов
/ 20 октября 2011

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

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

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

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

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

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