Основы

Документация для новичков

Устанавливаем высоту TableViewCells правильным способом

Чтобы изменить высоту ячейки в UITableView используем свойство rowHeight. Также, возможно сделать это в методе heightForRowAtIndexPath объекта типа UITableViewDelegate, но делать это таким способом не рекомендуется т.к. по заявлению Apple (см. док-цию) данная операция достаточно ресурсозатратная.

Используя heightForRowAtIndexPath метод можно создать таблицу с ячейками разной высоты. И если таблица имеет небольшой размер, то замедление в производительности будет не заметно, но чем больше таблица,

Загрузка приложения в Landscape режиме (альбомный режим)



основано на статье
http://developer.apple.com/iphone/library/documentation/iPhone/Conceptua...

Стандартно, приложения в iPhone OS загружаются в портретном режиме (portrait mode), так, как выглядит Home экран. Если же телефон повернуть на левый бок или правый, то приложение переключится в Landscape mode. Все это стандартное поведении системы. Чтобы приложение всегда стартовало в режиме Landscape нужно:

  • В файл Info.plist добавить ключ UIInterfaceOrientation. Значением ключа указать UIInterfaceOrientationLandscapeLeft (перевернет экран в левую сторону) или UIInterfaceOrientationLandscapeRight (повернет экран вправо).
  • Установите раскладку (layout) view в режим Landscape и убедитесь что опция autoresizing установлена корректно.
  • Переопределите метод shouldAutorotateToInterfaceOrientation: в вью-контроллере (view controller) чтобы возвращалось YES для режима Landscape и NO для портретного режима (portrait mode).
ikirin аватар

Понижаем энергозатраты

материал основан на http://developer.apple.com/iphone/library/documentation/iPhone/Conceptua...

Все известно, что одни из важнейших параметров мобильного устройства является его способность максимальной работы от батареи. Соответственно, не стоит игнорировать данный факт во время разработке Вашего приложения. На уровень зарядки аккумулятора, а точнее его быстроту разрядки влияют многие факторы. Итак, давай перечислим элементы, оптимизируя работу которых можно снизить энергопотребление:

  • CPU-активность;
  • WiFi, baseband (Edge, 3G) модули;
  • Аксиллерометор;
  • Дисковые операции;

Работать с данными элементами можно по-разному. Более оптимальный алгоритм работы с перечисленными устройствами позволит снизить потребление энергии. Поиск данных алгоритмов зависит от конкретной ситуации их использования, но все же, существуют общее советы по оптимальному использованию данных устройств:

Иконка приложения и Заставка

перевод http://developer.apple.com/IPhone/library/documentation/iPhone/Conceptua...

Иконка приложения располагаемая на Home экране по умолчанию имеет имя Icon.png. В файле Info.plist можно поменять название иконки путем изменения значения CFBundleIconFile ключа. Иконка должна быть в формате PNG и располагаться в корне приложения (см. Структура пакета iPhone приложения (Application Bundle)). Иконка должна быть размером 57 x 57 пикселов без круглых углов и эффекта глянца. Система сама применит эти эффекты в момент отображения. Данное повидение можно изменить, если включить UIPrerenderedIcon ключ в Info.plist файл.

Операции с плавающей точкой (с дробными числами)

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

Не забудьте убрать ключ -mthumb во время компиляции, если используете операции с плавающей точкой.

Используйте память разумно (еще немного о памяти)

В iPhone OS нет гарбеж коллектора (механизм удаляющий объекты из памяти), поэтому, разработчики должны в ручную выполнять данную задачу. Ниже приводятся советы как лучше это сделать:

  • Как можно меньше используйте autorelease метод - autorelease не удаляет объекты из памяти сразу, они будут удалены, когда Вы явным образом очистите autorelease pool или до момента наступления следующего кольца событий (event loop). Если возможно, то лучше использовать release метод, который сразу удаляет объекты из памяти;

Эффективное использование памяти

статья основана на http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ApplicationEnvironment/ApplicationEnvironment.html

По причине того, что модель виртуальной памяти iPhone OS не использует диск для swap-файла - приложения в iPhone имеют достаточно серьезное ограничение в использование доступной памяти. Если, приложение будет использовать много памяти, то это может привести к значительному замедлению производительности и возможно принудительному закрытию его системой. Поэтому, во время производства приложения стремитесь использовать, как можно меньше памяти, как это только возможно.

Существует прямая зависимость от количества доступной памяти и производительности Вашего приложения. Дело в том, что система вместо того чтобы предоставить память приложению, когда это необходимо отвлекается на удаление из памяти ненужных в данное время ресурсов, через короткое время ей может потребоваться выполнить операции по восстановлению временно удаленных ресурсов.

Секции представленные ниже дадут Вам рекомендации как эффективно использовать память и что делать, если памяти осталось мало во время работы приложения.

Структура пакета iPhone приложения (Application Bundle)

Изображение

приложение iPhone - это некий пакет (директория), который содержит необходимы набор файлов (ресурсов) для работы приложения и само приложение (исполняемый файл). Данный пакет называется - бандл (связка). Приводим список ресурсов пакета приложения:

  • MyApp - исполняемый файл приложения. Имя данного файла совпадает с именем приложения и имеет расширение .app ;

Чтение файла из Application Bundle

Скажем у нас есть файл MyFile.txt (добавляем в Resources папку нашего Xcode проекта ). Прочитать его можно так:

  1. NSString *filePath = [[NSBundle mainBundle] pathForResource:@"MyFile" ofType:@"txt"];
  2. NSData *myData = [NSData dataWithContentsOfFile:filePath];
  3. if (myData) {
  4.         // do something useful
  5. }

Пример, как использовать MyFile.txt в качестве хелп файла отобразив его в UIWebView:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"HelpDoc" ofType:@"htm"];

ikirin аватар

Локализация

Локализация – это ничто иное, как перевод пользовательского интерфейса на родной язык пользователя использующий Ваше приложение. И так, какие компоненты нужно переводить:

  • Текст генерируемый кодом. Также, следует учитывать локальные аспекты, такие как формат даты, времени, формат чисел.
  • Статический текст. К примеру Html файл загружаемый в web view в качестве help файла
  • Различные иконки и картинки
  • Звуковые файлы содержащие речь.
  • Nib файлы (пользовательский интерфейс)

Изображение

Через настройки телефона пользователь может выбрать любой язык. Выбранный язык ассоциируется с подпапкой Вашего приложения (Appliсation bundle). Имя подпапки состоит из кода языка (по спецификации ISO 639-1) и .lproj. Для примера, ресурсы для английского языка будут храниться в en.lproj. По соглашения, директории, где хранятся ресурсы для разных языков принято называть lproj-директории.