Изучите C сначала прежде, чем изучить [закрытый] Objective C

Я нашел действительно классную библиотеку, попробуйте это. это действительно гладкое и простое в использовании.

https://github.com/TakuSemba/CropMe

107
задан The Archetypal Paul 10 November 2008 в 07:46
поделиться

19 ответов

Я изучил бы C сначала. Я изучил C (и сделал много в C) прежде, чем переместиться в Obj-C. У меня есть многие коллеги, которые никогда не были настоящими программистами C, они запустили с Obj-C и изучили только столько же C по мере необходимости.

Время от времени я вижу, как они решают проблему полностью в Obj-C, иногда приводящем к очень неуклюжие решения. Обычно я тогда заменяю некоторый код Obj-C чистым кодом C (в конце концов, можно смешать их так же как Вам угодно, содержание метода Obj-C может быть полностью, чистый код C). Без любого намерения оскорбить любого программиста Obj-C, существуют решения, которые очень изящны в Obj-C, это решения, которые просто работают (и взгляд) намного лучше благодаря объекты (программирование ООП может сделать сложные программы намного более прекрасными, чем функциональное программирование; полиморфизм, например, является блестящей функцией)... и я действительно как Obj-C (намного больше, чем C++! Я ненавижу синтаксис C++, и некоторые функции языка являются простым излишеством и приводят к плохим шаблонам разработки, по моему скромному мнению); однако, когда я иногда переписываю код Obj-C своих коллег (и я действительно только делаю так, если я думаю, что это абсолютно необходимо), получающийся код обычно на 50% меньше, только 25% потребностей памяти это использовало прежде и приблизительно на 400% быстрее во времени выполнения.

, Что я пытаюсь сказать здесь: Каждый язык имеет свои за и против. C имеет за и против и Obj-C - также. Однако действительно замечательная особенность Obj-C (вот почему мне даже нравится он больше, чем Java) - то, что можно перейти в плоскость C по желанию и назад снова. Почему это - такая замечательная особенность? Поскольку точно так же, как Obj-C фиксирует многие недостатки чистого C, чистый C может зафиксировать некоторые недостатки Obj-C. При смешивании их вместе, Вы примете очень мощную команду.

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

А типичным примером был некоторый код, который мы использовали, который должен был закодировать данные в base64, но мы не могли пользоваться внешней библиотекой для того (никакой lib OpenSSL). Мы использовали base64 кодер, совершенно записанные классы Какао использования. Это работало хорошо, но когда мы заставили его закодировать 200 МБ двоичных данных, это взяло вечность, и память наверху была недопустима. Я заменил его крошечным, крайним компактным base64 кодером, записанным полностью как одна функция C (я скопировал тело функции в тело метода, метод взял NSData в качестве входа и возвратил NSString, как произведено, однако в функции, все было C). Кодер C был настолько более компактным, он разбил чистый кодер Какао фактором 8 в скорости, и память наверху была также намного меньше. Кодирование/Декодирование данных, игра вокруг с битами и подобными низкоуровневыми задачами являются просто сильными сторонами C.

Другим примером был некоторый код UI, который потянул много графиков. Для того, чтобы хранить данные, необходимые для рисования графиков, мы использовали NSArray's. На самом деле NSMutableArray, так как график был анимирован. Результат: Очень медленная анимация графика. Мы заменили весь NSArray's нормальными массивами C, объекты со структурами (после того, как вся информация о координате графика - ничто, что Вы должны иметь в объектах), доступ перечислителя с простым для циклов, и запустил движущиеся данные между массивами с memcopy вместо того, чтобы брать данные от одного массива до другого, индекса для индекса. Результат: скорость фактором 4. График анимирован гладко, даже в более старых системах PPC.

слабость C - то, что каждая более сложная программа становится ужасной в конечном счете. Хранение C приложения читаемые, расширяемые и управляемые требования большая дисциплина программиста. Много проектов перестали работать, потому что эта дисциплина отсутствует. Obj-C облегчает для Вас структурировать Ваше приложение с помощью классов, наследования, протоколы и так далее. Однако я не использовал бы чистую функциональность C через границы метода, если не необходимо. Я предпочитаю сохранять весь код в приложении Objective C в рамках метода объекта; все остальное побеждает цель приложения OO. Однако в рамках метода я иногда использую чистый C исключительно.

163
ответ дан Mecki 5 November 2019 в 10:31
поделиться

В зависимости от многих языков Вы уже знаете, что это может быть лучшая идея только начать изучать Objective C. Основа на большинстве языков является в основном тем же, это - синтаксис, который отличается. Изучение C сначала действительно не будет иметь большую часть значения когда дело доходит до изучения Objective C.

1
ответ дан Dave 5 November 2019 в 10:31
поделиться

C дает Вам очень мало абстракции от блока. Некоторые компиляторы C даже позволят Вам встроенный ассемблерный код. Это может быть очень полезно для размышления о том, как компьютер работает, который важен для знания.

Однако если Вы действительно интересуетесь Объектом-C, не позволяют себе застрять, пишущий что-то в C просто потому что его "польза для Вас". Вы не должны расстраивать себя, в то время как Вы пытаетесь изучить новый набор навыков. Важно, чтобы Вы весело провели время с тем, что Вы делаете.

2
ответ дан Steve g 5 November 2019 в 10:31
поделиться

Согласно Википедия , Objective C является строгим надмножеством C. При этом я предложил бы изучить C сначала. Тогда, когда Вы изучаете Objective C, будет ясно, какие части добавляются как часть Objective C.

2
ответ дан Trent 5 November 2019 в 10:31
поделиться

Можно перейти непосредственно в Objective C со следующими преимуществами:

  1. Вы изучите "немного" C в пути.
  2. Вы изучите части C, которые важны для Вас.

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

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

3
ответ дан OscarRyz 5 November 2019 в 10:31
поделиться

Честно, столько языков основано на синтаксисе C, с которым это - хорошая вещь быть знакомым. Я занял бы неделю или два для ознакомления себя с C независимо.

Однако я действительно просто преподавал мне Objective C, и я должен быть честным: Я не нашел свой опыт C быть столь же полезным, как я буду думать. Objective C был определенно открытием глаза для меня.

3
ответ дан user25967 5 November 2019 в 10:31
поделиться

Существует много вещей, которые Вы не можете сделать просто в Objective C, так осваивание некоторых основных навыков C будет довольно очень важно. Необходимо будет, по крайней мере, понять объявления переменной и основные библиотечные функции C, или Вы будете расстроены.

4
ответ дан Mark Bessey 5 November 2019 в 10:31
поделиться

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

области C, от которого Вы не будете зависеть очень:

  • Адресная арифметика с указателями и массивы. Я не использовал массивы C вообще.
  • струны до. Строки Objective C делают задание, более хорошее и более безопасное.
  • Ручное управление памятью, если Вы используете GC в Obj-C 2.1. Я настоятельно рекомендую этот маршрут для скорости разработки и причин производительности.
5
ответ дан Giao 5 November 2019 в 10:31
поделиться

Это - хорошая идея изучить C прежде, чем изучить Objective C, который является строгим надмножеством C. Это означает, что Objective C может поддерживать весь нормальный код C, таким образом, код, характерный для программ C, обязан обнаружиться даже в коде Objective C.

В дополнение к рассмотрению вещей просто с точки зрения языка, Вы найдете, что Mac OS X является полной операционной системой Unix. Все системные библиотеки уровня записаны в C.

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

7
ответ дан Doug 5 November 2019 в 10:31
поделиться

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

10
ответ дан TheXenocide 5 November 2019 в 10:31
поделиться

Я погрузился бы прямо в с Objective C - если Вы уже получили несколько языков под своим поясом, это не синтаксис, который является кривой обучения, это - Какао.

15
ответ дан Paul Dixon 5 November 2019 в 10:31
поделиться

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

С точки зрения имеющихся ресурсов, документация Apple действительно обычно принимает знакомство с C, таким образом начиная с Objective C, 2.0 Языка программирования не будут иметь большой выгоды для Вас. Я вложил бы капитал в копию Программирования в Objective C Stephen Kochan (в зависимости от того, как быстро Вы хотите реализоваться, можно рассмотреть ожидание второго выпуска):

Библиотека Разработчиков Objective C Программирования Objective C Программирования 2.0 Библиотеки Разработчиков

Это не принимает предшествующего опыта и преподает Вам Objective C и столько C, сколько Вам нужно.

, Если Вы чувствуете себя немного амбициозными, Вы могли бы запустить с , Scott Stevenson "Изучает C" Учебное руководство , но это действительно имеет некоторые предпосылки ("Необходимо уже знать по крайней мере один язык сценариев или язык программирования, включая функции, переменные и циклы. Необходимо будет также ввести команды в Терминал Mac OS X".).

(Только для справки и для контекста: Я изучил обоих одновременно назад в 1991 - это, казалось, не делало мне ничего плохого. Я действительно, тем не менее, имел фон в ОСНОВНОМ, Паскале, Логотипе и LISP.)

25
ответ дан NANNAV 5 November 2019 в 10:31
поделиться

Лучше, я не знаю, еще меньше поскольку я не знаком с Objective C.
, Но основания C не так тверды учиться, это не очень сложный язык (с точки зрения синтаксиса, не с точки зрения освоения!), поэтому пойдите для него, это не будет напрасно тратиться время.
Лично, я думаю, что это всегда - хорошая идея изучить C, это дает хорошее понимание того, как компьютер работает. В конце концов, большинство языков и систем все еще записаны в C. Тогда идите дальше!:-)

пз.: "Движением" я не имел в виду, "отбрасывают его", просто "узнают больше, учатся отличающийся". Как только Вы знаете C, Вы никогда не могли бы отбрасывать его: JNI использования Java для вызова стандартных программ C для низкоуровневого материала, Python, Lua, и т.д. часто расширяется с помощью кода C (ссылка Lua даже просто принимает некоторое знание C для некоторых функций, которые являются просто тонкой оберткой к функции C позади), и так далее.

3
ответ дан PhiLho 5 November 2019 в 10:31
поделиться

Поскольку Вы изучаете Objective C и Какао, Вы не можете постараться не изучать биты C. Например, прямоугольники распространены представленный CGRect, структурой C.

Если Вы имеете время, любой ценой изучаете C. Как другие сказали здесь, книга Kochan (вторые и первые выпуски) превосходна как книга для погружения в.

5
ответ дан mattwestbright 24 November 2019 в 03:37
поделиться

Вы хотите быть жестким разработчиком? Затем изучите c сначала.

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

C язык программирования

Стандартная библиотека для C

2
ответ дан Freddie 24 November 2019 в 03:37
поделиться

Я сразу изучил Objective-C, и он работал нормально около года, у меня просто были некоторые трудности с чтением кода C, когда я загружал проект, чтобы посмотреть, как они работают, но теперь я действительно чувствую необходимость изучения C. Вы можете попробовать изучить ObjC без C, но рано или поздно вам понадобится C.

1
ответ дан 24 November 2019 в 03:37
поделиться

Цель C достаточно отличается от C, чтобы сначала не заслужить обучение C.

Из синтаксиса / языковой перспективы семьи почти лучше изучать SmallTalk (на какой объективный C основан)

с практической точки зрения, сосредоточить свои усилия на изучении одного языка одновременно.

Позже, если вы хотите узнать другой язык, C ++, Java и Python являются 1) Легко изучить в качестве кучу 2) популярны и, таким образом, продаются 3) мощным.

2
ответ дан 24 November 2019 в 03:37
поделиться

Я много думал об этой проблеме, прежде чем писать свою книгу по Objective-C. Во-первых, я действительно считаю, что изучение языка C перед изучением Objective-C - неправильный путь. C - это процедурный язык, содержащий множество функций, которые не являются необходимыми для программирования на Objective-C, особенно на уровне новичков. Фактически, использование некоторых из этих функций противоречит принципу соблюдения хорошей методологии объектно-ориентированного программирования.Также не рекомендуется изучать все детали процедурного языка (и атаковать решение проблемы с помощью функций и методов структурированного программирования) перед изучением объектно-ориентированного языка. Это может запустить программиста в неправильном направлении, что потенциально может привести к развитию неправильной ориентации и мышления для развития хорошей дисциплины объектно-ориентированного программирования. Тот факт, что Objective-C является расширением языка C, не означает, что вам нужно сначала выучить C!

Я думаю, что обучение Objective-C и лежащему в его основе языку C как единому интегрированному языку является правильным подходом. Нет причин узнавать, что выражение «for» взято из языка C, а не из его надмножества языка Objective-C. Кроме того, зачем подробно изучать такие вещи, как массивы и строки C (и манипулировать ими) , прежде чем , например, изучать массив (NSArray) и строковые объекты (NSString)? Во многих текстах на C много времени уделяется структурам и указателям на структуры, а также перебору массивов с указателями. Но вы можете начать писать программы на Objective-C, не зная ни об одной из этих функций языка C. А для начинающего программиста это большое дело. Это не только сокращает кривую обучения, но также сокращает объем материала, который необходимо изучить (и частично отфильтровать) для написания программ на Objective-C.

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

18
ответ дан 24 November 2019 в 03:37
поделиться

Черт возьми, идите прямо к цели C!

Я перешел с ActionScript 3 на Objective C, и у меня уже есть стажер в компании!

Делай, что хочешь.

0
ответ дан 24 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: