Objective-C и его отношение к C - PullRequest
1 голос
/ 16 июня 2010

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

Я Java-разработчик с фоном C, и мне нужно начать изучение Objective-C с цели создания мобильного приложения для iPhone и , чтобы освежить свои знания в C (насколько я знаю, Objective -C - это чистый надмножество для C, не так ли?).

Таким образом, вопрос в том, смогу ли я достичь двух целей, которые, опять же:

  1. Обнови мобильную версию для iPhone
  2. освежите мои знания с помощью C

Ответы [ 6 ]

4 голосов
/ 16 июня 2010

Objective C - еще одно объектно-ориентированное расширение C. Все, что вы знаете в C, будет работать.

Лучший документ для понимания цели C -

http://developer.apple.com/mac/library/documentation/cocoa/conceptual/ObjectiveC/ObjC.pdf

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

Если вы действительно наслаждаетесь миром зла, вы можете рассмотреть Objective-C ++, который сочетает в себе и C ++, и Objective-C

.
1 голос
/ 16 июня 2010

Objective-C является строгим надмножеством языка C. Но, по моему мнению, существует множество дополнений в синтаксисе, которые подавляют, и я могу гарантировать, что вы собираетесь использовать многие из этих дополнений в языке C, потому чтокаркасов Apple.Поэтому, если бы вы собирались обновить свою память на CI, я бы лично сделал что-то еще.

Как в примере:

Все ваше программирование выполняется, в большинстве случаев, в дваклассы.AppDelegate или ViewController.Вызов функций в C выглядит следующим образом:

foo();

Но, поскольку все это программирование выполняется в классах, вам нужно вызывать его с помощью объекта:

FooViewController *FooCaller;
[FooCaller foo];

Этот синтаксис используется очень частов программировании iPhone, но синтаксис C не часто используется в программировании iPhone.

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

1 голос
/ 16 июня 2010

Да, Objective-C - это чистый надмножество C; это не чувствует очень похоже на C, хотя. Это действительно больше похоже на Java, + - некоторые синтаксические изменения, чем на традиционное низкоуровневое системное программирование с использованием указателей-арифметики. Наиболее очевидным примером является, например, то, что программирование iPhone традиционно использует класс NSString для представления строк, а не стиль C * char. Вы по-прежнему можете использовать * char для представления строки в Objective-C; он просто осуждается, и практически для всего, для чего вы будете его использовать (включая, по всей вероятности, 100% всей функциональности iPhone), класс NSString более чистый и более функциональный. Тем не менее, это вернет вас к синтаксису довольно хорошо, если не идиомы.

И да, Objective-C буквально обязателен для iPhone. Так что да, изучение Objective-C - это способ достичь обеих ваших целей.

0 голосов
/ 16 июня 2010

В моем опыте разработки для Mac единственное время, когда мне нужно было использовать C, это когда я возвращался к старому Carbon API. Какао - все Цель C и весьма отличается от старой школы c. Насколько я знаю, все API-интерфейсы iPhone используют цель c, и вам может понадобиться только стиль гангстера c, если вы используете библиотеку, уже написанную в нем.

0 голосов
/ 16 июня 2010

Интересно отметить, что Objective-C начал свою жизнь как своего рода препроцессор для C. От /usr/include/objc/objc.h:

typedef struct objc_class *Class;
typedef struct objc_object {
    Class isa;
} *id;

Каждый объект Objective-C можно описать как структуру с указателемк его классу, его иварам и указателям на функции для его методов.Отправка сообщений и т. Д. Усложняет ситуацию, но когда дело доходит до этого, все может быть сделано в C, если вы достаточно терпеливы.

0 голосов
/ 16 июня 2010

Objective-C - это расширенный набор C.

  1. Да.
  2. Возможно.Можно использовать в основном объективные функции C, не возвращаясь к обычному C.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...