Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 5
×

нужны ли знания с/с++ для изучения objective-c

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Здравствуйте. Собственно вопрос. Нужны ли знания с/с++ для качественного изучения objective-c, чтобы в дальнейшем программировать под iphone?
В интернете на форумах пишут, что не надо. Что можно сходу учить objective-c и переходить на изучение Cocoa framework.
Но есть 2 момента.
1. В вакансиях часто пишут, что нужны знания с/с++ , objective-c (зачем?)
2. По себе знаю, что можно начать изучать язык поверхностно. Например, под с# можно сразу делать формочки и не знать, что такое ООП и зачем нужны интерфейсы и т.д., а потом уже по мере необходимости учить что надо. Но это не путь джедая, как по мне.
Второй вариант изучения — познать основы, а потом уже переходить к темам посложнее.

Так вот что посоветуете, насколько сильно поможет изучение с/с++? Вернее, в моём случае это будет повторение, ибо на первом курсе учил. Но всё-равно какое-то время займёт. Стоит остановиться, вдумчиво повторить с++. Поделать разные упражнения из книги Дейтла?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

1. C нужен, C++ - не всегда.
2. Сам по себе Objective-C прост как две копейки, но необходимость въезжать в их философию имеется. Философия отлична от C++, так что прямой непосредственной пользы от него не будет.
3. Зачем требуют C/C++ и Objective-C: Потому что часто по разным причинам на проектах одновременно присутствует Objective-C’шный GUI’ный код и C/C++ ядро приложения и либы.
Итого: смотря чем планируете заниматься. Если писать мелочевку исключительно под iOS — C++ не нужен. Если портировать на него игры — от Objective-C там будет от силы несколько десятков килобайт копипасты от проекта к проекту. Также есть и промежуточные варианты.

Одно время перешел на ObjC с джавы.

В общем-то по своей структуре ObjC пожалуй ближе к java, чем к С++. Наследование к примеру чисто джавовское (наследуем один класс и множество интерфейсов).
С другой стороны есть довольно много особенностей, которых нет ни в С++ ни в java.

Синтаксис опять же свой специфический.

Что касается знания чистого С. Да, можно использовать чистый С. Но реально мне подобного приходилось видеть мало.

Так что на мой взгляд примерно одинаково переходить на ObjC что с джавы, что с плюсов.

оффтоп: не жалеете, что перешли с джавы?

Выбора не было. Появился — вернулся на java. Но с ностальгией вспоминаю о некоторых особенностях ObjC. Например о принципиальном отсутствии NullPointerException

>Что касается знания чистого С. Да, можно использовать чистый С. Но реально мне подобного приходилось видеть мало.

Угу. Дык, вы формошлепите. Так бы сразу и сказали. Ибо только в этом случае вы не пользуетесь фреймворками, типа Core Foundation, Core Graphics, Core Text и подобными корами.

>Так что на мой взгляд примерно одинаково переходить на ObjC что с джавы, что с плюсов.

Дял шлепания формочек — вообще без разницы с чего на что переходить. И счастью вашему нет предела, что появился сториборд и ARC, ибо теперь можно шлепать еще больше.

Ух ты, какой блестящий анализ. Так бац и определили чем я занимался и чему я должен радоваться ))))

Никакого анализа. Осоновываюсь исключительно на ваших словах.

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

Какие-то у Вас однобокие представления об ObjC.
Нормальный полноценный объектно ориентированый язык.

Впрочем если для Вас процесс программирования сводится к использованию фреймворков, то тогда конечно.

Угу. Есть только одна проблема. У вас нет представления об обжективе. Вообще никакого. Иначе, вы бы не написали такую фигню: «если для Вас процесс программирования сводится к использованию фреймворков, то тогда конечно». Поэтому, вы не можете оценить, какие представления об обжективе имею я.

Хотя да, что можно ожидать от формошлепа — явера? Вы вообще в курсе, что стандартная библиотека на обжективе — это фреймворки? А в курсе, что NSObject — часть фреймворка? Или вы, аки настоящий красноглазик писали свою реализацию рут объекта? Хоть когда-нить видели CoreFoundation и Foundation фреймворки и представляете, что они есть такое?

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

А то меня этот бред, который вы вещаете уже перестал веселить.

>Вы так хорошо все про меня знаете )))

Отнюдь. Основываюсь на ваших же сентенциях.

>А то меня этот бред, который вы вещаете уже перестал веселить.

Ну-ну. Может, вы еще сумеете и обосновать, что из сказанного мною бред? Или вы чисто так? Лужи погазифицировать?

знаю, что забегаю вперёд. Но пока тема свежа, не могли бы Вы дать ещё просветляющих задачек, но уже по указанным Вами фреймворкам (Core Foundation, Core Graphics, Core Text и другим). Так, чтобы это было не формошлёпство, а тру код, за который много платят.

IMHO при освоении новой платформы лучше сразу себе придумать реальную задачу, реальный проект. Особенно это актуально при изумении мобайл-платформы. А дальше трудиться и постепенно осваивать фреймворки

Возьмите любую реальную задачу и дальше уже сами увидите, где что надо лепить. Все же зависит от задачи, которую будете пользовать.

Возьмите и реплицируйте приложение из стора какое-нить, сразу же встанет куча вопросов из этой области.

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

нужно ли при написании программ на С руководствоваться стандартом С89 или можно С99? Например, в С99 переменные можно объявлять в любом месте программы, а в С89 только в начале блока.

C99. А вообще, смотрите на фишки ЖСС.

С++ не нужен. Это про Обжектив и С++:

www.developers.org.ua/...ic/4766/#146511

С нужен в обязательном порядке на уровне структур, работы с памятью, указателей, кастования, колбеки и т.п. ТАкже, неплохо бы освежить разные новомодные ключевые слова, типа inline, которые умеет пользовать GCC.

C++ нужен только, если перецца в геймдев. В описаниях вакансии пишут С/С++/Objective-C зачастую потоиму, что сидит в компании безграмотное кодло, ибо редко где Objective-C++ используецца.

>Например, под с# можно сразу делать формочки и не знать, что такое ООП и зачем нужны интерфейсы и т.д., а потом уже по мере необходимости учить что надо.

Будешь неконкурентоспособен. Второе, там необходимость в базовых знаниях есть сразу же, т.к. язык объектно-ориентированный, но имеющий все возможности С. БОлее того, часть стандартный библиотеки использует не обжектив, а чистый С (например, core foundation).

Большое спасибо за ответ. С++ в своё время учил по книге Дейтла. Посоветуйте дельную литературу по С.

Керниган и Ритчи — «Язык программирования С»

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

Ну где-то так. Если это все сделаешь, считай, что к написанию кода на С-шной части маковской библиотеки готов (т.к. все это или куски этого иногда приходицца пользовать, особенно, если хоть когда-нить столкнешься с Accelerate Framework).

за книгу спасибо и, особенно, за рекомендации по дальнейшему обучению.

Ух ты! прикольные критерии оценки знания Си, зачет.

А скажите, хотя бы половина боевых iOS-девов смогут реализовать все перечисленные пункты? Без всякого скрытого умысла или иронии спрашиваю, интересно просто

Просто сам хочу посмотреть на iOS-разработку поближе, но вижу, что придется сесть и освежить свои познания в Си )))

Угу. В обязательном порядке.

Спросить-то можно, только вот про других ответить малореально

Я хз. Не работал никогда с украинцами.

Иностранцы годные знают все это, разные демперы — нет, но им и платят соответственно.

Наверное немного офтопа. Если в С нету классов, то задание с деревьями на структурах писать?

Конечно же.

Синглтон тоже.

стоит ли углубляться в ООП с++? где-то вскользь читал холивары, что в objective-c с ООП как-то по другому.

Я бы так сказал: знания С/С++ не обязательны НО крайне желательны при изучении Objective C, поскольку он является надстройкой над классическим С. Понимать как работают указатели нужно, знать что такое виртуальные функции тоже необходимо.

Плюс знание С/С++ сильно поможет при программировании игр

Знания Си, реляционной модели, базовых алгоритмов нужны для старта КАЖДОМУ прогоаммеру.
Не надо тратить на них годы. Просто ознакомиться вполне достаточно.

Там не так много материала на самом деле. И масса литературы.

Підписатись на коментарі