От PHP до Objective-C

Будучи довольно опытным разработчиком PHP и хорошо осведомленный о C (написал эксперимент с распределенными вычислениями с 16 из моих микроконтроллеров Dad NEC), я хотел бы сделать переход на Objective-C и Cocoa, в конечном итоге с целью интеграции приложений Mac/iPhone с некоторыми из моих проектов PHP.

Просматривая книгу "Cocoa Программирование для Mac OS X" от Arron Hiilegass, я немного расстроен. Я могу работать с примерами, но он точно не объясняет почему он использует класс таким образом (NSNumber вместо int или double, например).

Я ищу хорошую книгу/книги, чтобы опереться на Objective-C. Мой вопрос: какая хорошая книга? Я смотрю "Программирование в Objective-C 2.0", и он выглядит довольно прилично. Куда я пойду оттуда? Я думаю, что я должен снова начать с моей книги Cocoa.

Кроме того, есть ли какие-либо ресурсы в Интернете, которые помогут при переходе с PHP на Objective-C? Я знаю, что PHP - это свободно написанный язык сценариев, поэтому он имеет свои отличия. Есть некоторые вещи, которые просто не имеют смысла с Obj-C и Cocoa, почему я не могу поместить целые числа в NSMutableArray?

В любом случае. Спасибо за помощь! (Мне только 14 лет, так что будь легко, если я допустил ошибки в своем Q.)

Ответ 1

Я только что прошел через "Программирование в Objective-C 2.0", и это довольно хорошо. Я бы рекомендовал его, особенно если вы никогда не использовали C (или если вы забыли его, как я).

Однако у Apple действительно отличная документация. Если вы не против читать в Интернете, я начну с Начало работы с Cocoa.

Ответ 2

Я могу работать над примерами, но он точно не объясняет, почему он использует класс таким образом (NSNumber вместо int или double, например)...

Есть некоторые вещи, которые просто не имеют смысла с Obj-C и Cocoa, почему я не могу поместить целые числа в NSMutableArray?

NSNumber - гораздо более полезный тип, чем примитивный тип типа int или double, поскольку он часто используется в в сочетании с другими объектами, с которыми вы столкнетесь, как вы программируете в Cocoa.

Например, чтобы упаковать число в виде значения в изменяемый размер массива (например, NSMutableArray) или ассоциативный массив (экземпляр NSDictionary), вам нужно превратить примитив числа (int, double и т.д.) в сериализуемый serializable, или архивируемый объект - NSNumber.

Примитивы не могут быть сериализованы, в отличие от NSNumber, потому что примитивы не входят в базовый набор типов "Core Foundation" (NSNumber, NSArray, NSString и т.д.), которые Apple имеет много работали, чтобы предоставить вам доступ.

Кроме того, используя NSNumber, вы также получаете множество бесплатных методов удобства: вы можете быстро преобразовать число в строку, например, просто набрав [myNumber stringValue].

Или, если вы рассматриваете свой NSNumber как цену чего-либо ( "$ 1.23" ), вы можете применить NSNumberFormatter, чтобы убедиться, что операции с номером дают результаты, которые имеют формат, который вы ожидаете (например, если вы добавите два значения цены, вы ожидаете получить значение валюты взамен).

Нельзя сказать, что вы не можете или не должны использовать переменные int или double. Но во многих случаях вы обнаружите, что NSNumber - лучший вариант, поскольку вы можете писать меньше кода и получать много функций для "бесплатного".

Ответ 3

По моему опыту, я нашел документы в Интернете достаточно полезными для изучения Obj-C и CocoaTouch. Моя прогрессия прошла примерно так:

1) Смотрите видеоролики Apple Dev на iTunes (они бесплатны).

2) Прочтите Начало работы, Руководство по программированию приложений iPhone.

3) Прочитайте OOP в Obj-C.

4) Подробнее: Cocoa Основы, Objective-C Primer, Cocoa Практика.

5) Сделайте несколько простых руководств.

ИМО: Вся информация, которая вам нужна, находится на сайте Apple Dev: iPhone. Сохраните свои деньги и не покупайте книги. Если вы не понимаете "ПОЧЕМУ", что-то делается в одном из руководств или руководств, перекрестно ссылайтесь на него с другими источниками из Google.

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

PHP сильно отличается от Objective-C. Кроме того, проблемы программирования в PHP в контексте Интернета сильно отличаются от того, как проблемы программирования решаются в Obj-C, в контексте iPhone. Из-за этого вы хотите приблизиться к iPhone с новой точки зрения и как ученик/ученик. Не торопитесь и сосредоточьтесь на объектно-ориентированном программировании и лучших практиках. Это благословит вас на долгие годы.

-Buffalo

Ответ 4

Кроме того, чтобы ответить на ваши вопросы:

Objective-C - это объектно-ориентированный язык, построенный как расширение поверх C.

Как таковой он предоставляет как примитивные типы (такие как int и double) и объекты.

NSNumber - это класс Objective-C, который представляет число PLUS для ряда операций над этим числом (методами). Преимущество использования NSNumber над числовым примитивным типом состоит в том, что его можно использовать объектно-ориентированным способом (вы можете отправлять ему сообщения, вы можете расширить его функциональность с помощью "протоколов", вы можете наследовать от него, вы можете пройти это в методе, который ожидает объект и т.д.).

Что касается NSMutableArray, это класс, который предоставляет функции, подобные массиву. Он предназначен для работы с типами объектов Objective-C (это контейнер объектов типа NSObject и объектов, которые наследуются от них), и именно по этой причине он не может содержать целое число. Он может, однако, содержать NSInteger, который является классом Objective-C, который представляет собой целое число.

Ответ 6

Я был в похожей лодке (PHP перешел на Objective-C), и я нашел, что лучший процесс - это перейти в проект. Я тоже прошел через книгу Hillegass, и это было хорошее начало, но единственный способ узнать язык - это просто запутаться с ясной целью.

Это больно, но это работает. Кофе, API и kleenex.

EDIT: Я только что прочитал последнюю часть вашего сообщения и увидел, что вам было 14. Возможно, переключите кофе с Coke:)

Ответ 7

Мой любимый Objective-C учебник, если вы приходят откуда угодно, это курс iTunesU из Стэнфорда по программированию на iOS. Профессор действительно ставит вещи в перспективе из других книг и онлайн-уроков.