Последняя версия Cassandra (3.11.3) поддерживает OpenJDK8 . Итак, у вас есть альтернатива Oracle Java.
NSString и CFStringRef "Беспошлинные соединенный мостом", означая, что можно просто преобразовать тип между ними.
Например:
CFStringRef aCFString = (CFStringRef)aNSString;
работы отлично и прозрачно. Аналогично:
NSString *aNSString = (NSString *)aCFString;
Предыдущий синтаксис был для MRC. При использовании ARC новый синтаксис кастинга следующие:
NSString *aNSString = (__bridge NSString *)aCFString;
работы также. Ключевая вещь отметить состоит в том, что CoreFoundation будет часто возвращать объекты с +1 подсчетом ссылок, подразумевая, что они должны быть выпущены (все CF [Тип] Создают функции формата, делают это).
Хорошая вещь состоит в том, что в Какао можно безопасно использовать автовыпуск или выпустить для освобождения их.
Я добавлю, что мало того, что можно пойти от CFString до NSString только с преобразованием типа, но это работает другой путь также. Можно отбросить эти CFStringCreateWithCString
сообщение, которое является тем меньше вещи, которую необходимо выпустить позже. (Использование CF Create
, где Какао использует alloc
, так так или иначе, необходимо было бы выпустить его.)
получающийся код:
NSString *escapedString;
NSString *unescapedString = [(NSString *) CFXMLCreateStringByUnescapingEntities(NULL, (CFStringRef) escapedString, NULL) autorelease];
Они эквивалентны, таким образом, можно просто бросить CFStringRef:
NSString *aNSString = (NSString*)aCFString;
Для большего количества информации посмотрите Бесплатные Соединенные мостом Типы.
На самом деле, вы не должны использовать сохранение, выпуск, автозапуск какао для объектов Core Foundation в целом. Если вы используете сборку мусора (на данный момент только в Mac OS X), вызовы keep, release и autorelease не работают. Отсюда утечки памяти.
Важно понимать асимметрию между Core Foundation и Какао - где сохранение, выпуск и автозапуск запрещены. Если, например, вы сбалансировали CFCreate… с выпуском или автоматическим выпуском, вы произведете утечку объекта в среде со сборкой мусора:
NSString *myString = (NSString *)CFStringCreate...(...);
// do interesting things with myString...
[myString release]; // leaked in a garbage collected environment
И наоборот, использование CFRelease для освобождения объекта, который вы ранее сохранили с помощью сохранения, приведет к подсчету ссылок ошибка недополнения.
PS: похоже, не могу комментировать ответ Питера Хози - извините за добавление моего собственного без необходимости.