Каковы подводные камни и недостатки смешения Objective-C и C? - PullRequest
6 голосов
/ 03 апреля 2009

Риск чрезмерно упрощать то, что я волнуюсь, может быть до смешного сложным, что я должен знать при смешивании C и Objective-C?

Edit: Просто чтобы уточнить, я никогда не работал с C раньше, и я изучаю Objective-C через какао. Также я использую движок Chipmunk Dynamics, который является C.

Ответы [ 3 ]

14 голосов
/ 03 апреля 2009

Я бы сказал иначе: вы рискуете слишком усложнить что-то, что до смешного просто: -)

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

О единственном случае, когда я когда-либо испытывал легкие хитрости, это когда я хотел передать метод экземпляра Objective-C в качестве обратного вызова для функции C. Скажем, например, я использую кросс-платформенную библиотеку pure-C, которая имеет функции, которые принимают обратный вызов. Я мог бы вызвать функцию из экземпляра объекта для обработки некоторых данных, а затем захотеть, чтобы эта функция C вызывала мой экземпляр BACK, когда это было сделано, или как часть получения дополнительного ввода и т. Д. И т. Д. (Обычная парадигма в C). Это можно сделать с помощью обворожительных функций и некоторых других креативных методов, которые я видел, и, если вам когда-нибудь понадобится, прибегнуть к помощи «метода target-c для обратного вызова c» или чего-то подобного, вы получите товар.

Единственный другой совет - убедиться, что ваши объекты должным образом управляют любой malloc редактируемой памятью, которую они создают для использования функциями C. Вы захотите, чтобы ваши классы target-c приводили в порядок эту память на dealloc, если она действительно завершена.

Кроме этого, отряхните все ссылки на C и получайте удовольствие!

7 голосов
/ 03 апреля 2009

Вы не можете «смешивать» C и Objective-C: Objective-C - это расширенный набор C.

Теперь C ++ и Objective-C с другой стороны ...

1 голос
/ 03 апреля 2009

Objective C является надмножеством C, поэтому не должно конфликтовать.

Кроме того, как указано здесь pure C имеет различные соглашения (очевидно, поскольку нет встроенного механизма) для обработки ОО-программирования. В C объект - это просто (struct *) с указателями на функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...