Со времени последнего моего поста прошло уже несколько месяцев. Причина столь долгого молчания не в том, что я забросил программирование для айфонов, совсем наоборот — я усиленно занимался изучением платформы и написанием приложений, которые вот-вот выйдут под более чем известным брендом;) Однако iOS настолько хорошо документирована и так подробно обсуждается на форумах, что еще нерешенных проблем, как реализовать ту или иную фичу, практически нет. Поэтому придумывать свое решения для какой-то достаточно распространенной задачи мне не приходилось. А описывать узкоспециальные проблемы, с которыми все же мне приходилось сталкиваться, но которые вряд ли волнуют еще кого-то из русскоговорящих программистов, бессмысленно, да и NDA не позволяет.
В общем, я в своем блоге придерживаюсь правила — не писать решение задачи, если оно где-то уже описано, пусть и не на русском. Однако, кроме технических проблем (есть задача -> вот для нее одно или несколько решений), есть и более «гуманитарные», которые предполагают множество в той или иной мере отличающихся мнений, претендующих на правильность.
К таким задачам относится и вопрос, как изучать программирование на каком-либо языке или для какой-либо платформы. Вот и я хочу высказаться на эту тему по отношению к iOS, т.к. сейчас мне стало более-менее понятно, что стоило читать и в какой последовательности.
Итак, мои советы начинающим. Правда, подойдут они только тем, кто способен читать по-английски. Без него успеха тут добиться вряд ли получится.
Objective-C
Естественно, раз речь зашла об iOS, то начать следует с изучения Objective-С. Если кто вдруг не в курсе, то это объектно-ориентированный язык, созданный на основе ANSI C (и полностью с ним совместимый). Поэтому для людей, знающих С, задача значительно упрощается.
for Advanced
К сожалению, мои советы по изучению Objective-C ориентированы на людей знакомых еще и с С++ или, хотя бы, с Java/С#. Этой категории программистов достаточно одной ссылки:
The Objective-C Programming Language /*iOS Developer Library*/
В этом документе из iOS Developer Library упоминаются и другие полезные гайды. Ну, да я думаю, сами разберетесь, что прочитать. Если все же хотите учить не по гайдам, а по нормальным учебникам, то советую внимательно подойти к его выбору. Я в свое время купил на амазоне «Programming in Objective-C» by Stephen G. Kochan просто потому, что это самая популярная там книга на эту тему. Но мне она показалась довольно скучной, т.к. ориентирована на новичков, не знающих даже С, не то что ООП. Из-за чего мне пришлось выуживать новую информацию среди хорошо известной. Поэтому, если и покупать учебник, то выбирать его надо исходя из своего текущего опыта программирования.
При изучении советую обратить особенное внимание на такую конструкцию языка, как properties. Например, выражение self.title = nil; означает далеко не то, о чем можно подумать, имея опыт программирования на C++ или Java. Если в двух словах, то произойдет вызов специального метода, а не простое присвоение нулевого значения одной из переменных объекта.
Еще один важный вопрос — управление памятью. Читать нужно здесь:
Memory Management Programming Guide /*iOS Developer Library*/
Работа с памятью строится на счетчике ссылок. На самом деле, Objective-C поддерживает и автоматическую сборку мусора, но она работает только на Mac OS, не на iOS. Поэтому при изучении этой темы новое для себя обнаружат как C++ -программисты, так и Java-программисты.
На самом деле, если кому не терпится сразу приступить к написанию программ без чтения руководств, которые я тут упомянул, то такая возможность есть: можно совместить изучение Objective-C и iOS. Об этом я напишу ниже в разделе, посвященном освоению iOS. Но в любом случае, для полного понимания языка эти руководства стоит изучить. Без этого наверняка (даже не сомневайтесь!) набьете себе немало шишек.
for Beginners
Что касается совершенных новичков, не оттягащенных знанием всяких-разных языков программирования ,то тут учебники незаменимы. На английском языке их масса. Возможно, есть и на русском. Можно почитать ту, что я только что выше упомянул. Возможно, есть и лучше. Поэтому надо идти на Amazon и читать отзывы о книгах.
iOS
Теперь перехожу непосредственно к iOS.
По iOS существует масса замечательных руководств и статей (о том где их искать подробнее напишу ниже). Это приводит к тому, что необходимость в учебниках сводится к минимуму. Но, на мой взгляд, они все же полезны, т.к. способны дать общую картину изучаемого материала, пусть даже и поверхностную. А дальше, уже имея общее представление, можно углубленно изучать отдельные разделы.
В качестве учебника рекомендую «Beginning iPhone 4 Development: Exploring the iOS SDK» by David Mark, Jack Nutting and Jeff LaMarche. На самом деле, я читал более раннюю версию, посвященную программированию для iPhone 3. Но, думаю, новое издание не хуже. Купить можно снова на Амазон. Возможно, есть книги и лучше. Подтверждением тому, то что сейчас эта книга на третьем месте в поиске, хотя, когда я ее покупал, она была на первом.
Из достоинств учебника — очень простой английский, даже проще, чем документация на сайте Apple. Возможно, тому причиной частое употребление в технической документации эпитетов типа attractive). Во вторых, в этой книге разъясняются и конструкци Objective-C. Поэтому ее можно читать даже пропустив мимо ушей мои рекомендации выше относительно изучения языка. Однако, для полноценного освоения языка чтение руководств крайне неоходимо!
Теперь, ознакомившись с учебником, можно переходить к чтению руководств из iOS Developer Library, которую я уже упоминал. Ниже список гайдов, с которыми нужно ознакомиться в первую очередь:
Ссылку на нужное руководство можно найти в документации к интересующему классу в Reference.
Дополнительные ресурсы
На обучающем портале Apple iTunes U в соответствующем разделе можно найти бесплатные видеолекции, посвященные программированию для iOS, читавшиеся в Оксфоде и Стэнфорде. Естественно, на английском, некоторые с английскими же субтитрами.
В общем, пособий — море. Учить — не переучить.