#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];