Вызов методов C из вашего кода objective-c.

#iphone #objective-c

#iPhone #objective-c

Вопрос:

У меня есть несколько классов C, импортированных в мое приложение. Итак, наряду с моими классами .h и .m objective-c у меня есть несколько классов .h и .c C . Нормально ли это делать? Или мне нужно скомпилировать их в a .a, чтобы их можно было использовать?

Предполагая, что все в порядке, чтобы делать то, что я сделал, я хочу вызвать этот метод C

 mms_t *mms_connect (mms_io_t *io, void *data, const char *url, const char *host, const char *uri,const  char *query,int pport, int bandwidth) 
  

Итак, этот метод возвращает структуру с именем mms_t ?

Для этого требуется, чтобы я передал некоторый символ *. Что я могу передать в Objective-C здесь? Есть ли char * в этом языке? Я предполагаю, что я не могу передать NSString вместо него?

Я вижу из небольшого фрагмента кода C

     strTemp = @"mms://123.30.49.85/htv2";

char *g_tcUrl = new char[[strTemp length]   1];
  

используется ‘new’?

Какой эквивалент objective c приведенного выше кода?

Большое спасибо, -Code

Комментарии:

1. Длина NSString не равна количеству байтов строки.

2. Похоже, вы сильно запутались в разнице между C, C и Objective-C. C — это язык, Objective-C — это набор расширений поверх C (т. Е. Любой код C также является кодом Objective-C), а C — это другой язык, основанный на C. Расширение c обычно указывает на файл C, а не C . И char * — это обычный старый тип C, что означает, что по определению он находится в Objective-C.

Ответ №1:

Прежде всего, вам пришлось бы изменить тип вашего файла Objective-C на Objective-C . Вы можете сделать это, изменив расширение файла на .mm или используя панель информации о файле (ctrl-click, get info).

Для char* вы можете преобразовать NSString в строку C, используя либо UTF8String , либо cStringUsingEncoding: вот так:

 NSString *foo = @"Foo";
char *fooascii = [foo cStringUsingEncoding:NSASCIIStringEncoding];
char *fooutf8 = [foo UTF8String];
  

Комментарии:

1. Маленький вопрос: нужно ли также освобождать fooascii и footf8?

2. короткий ответ: нет. но вам обязательно следует прочитать документацию: developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Reference /…

Ответ №2:

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

Чтобы преобразовать строку Objective C в строки в стиле C, выполните:

 const char *cString = [strTemp cStringUsingEncoding:NSUTF8StringEncoding];