Совместное использование функций C между классами Objective-C - PullRequest
1 голос
/ 01 декабря 2011

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

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Objective C - это расширенный набор ANSI C. Таким образом, все функции C автоматически становятся глобальными, используются везде и могут вызываться из любого места, если специально не объявлено как static. Это верно, даже если функция C создается в реализации класса Objective C.

Просто поместите внешнюю декларацию, такую ​​как:

extern myType my_C_function(parameterType foo);

в заголовочном файле .h любого класса Objective C, из которого вы хотите вызвать свою (нестатическую) функцию C.

1 голос
/ 02 декабря 2011

Reentrancy является ключевым. Убедитесь, что вы не используете какие-либо общие данные, кроме константных ссылок в ваших C функциях. Кроме того, если для обратных вызовов необходима ссылка на классjective-C, то это можно передать как указатель void.

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