Objective-C является строгим надмножеством C, поэтому вы можете использовать любой C-код без каких-либо изменений.Я предлагаю либо использовать код C как есть (насколько это возможно), либо заново реализовать алгоритм с объектами в Objective-C.
NSString to char
Что вам нужно предоставить, так этоспособ сделать преобразование объектов Objective C в типы C, такие как NSString * в char *.
Преобразование правильное, но вы можете использовать -UTF8String
, чтобы сохранить все символы неповрежденными, Latin-1 можетпотерять некоторую информацию.Недостаток utf-8 в том, что ваш код на C может не работать с ним корректно.
Лучше получить длины, используя один из методов NSString вместо strlen , поскольку он имеет линейное время выполнения и методы NSString могут быть постоянными.
// utf-8
int len = [source length];
// latin 1
int len = [source lengthOfBytesUsingEncoding:NSISOLatin1StringEncoding];
int для NSInteger
Нет причин для преобразования целых чисел в NSIntegers.Apple добавила этот тип для 64-битной совместимости.NSInteger является typedef'd так, что на 32-битных платформах ему нужно 32-битных и на 64-битных платформах 64-битных.
Я бы постарался изменить как можно меньше кода C.(Упрощает его обновление при обновлении оригинала.) Так что оставьте целые как они.
Управление памятью
Управление памятью C является более базовым, чем Objective-C, но какВы, кажется, знаете, что используете malloc и free, но это остается неизменным.Retain / release и сборщик мусора полезны только для объектов.