Как перевести код Objective-C на C ++ с поддержкой ARC

Один блог, связанный с блоком Objective-C говорит: когда ARC включен, следующие коды:

typedef int (^blk_t)(int);
blk_t func(int rate)
{
return ^(int count){return rate * count;};
}

может быть переведен в C ++ коды, как показано ниже -перепишем-ObjC из лязга:

blk_t func(int rate)
{
blk_t tmp = &__func_block_impl_0(__func_block_func_0, &__func_block_desc_0_DATA, rate);
tmp = objc_retainBlock(tmp);
return objc_autoreleaseReturnValue(tmp);
}

Я пытался сделать перевод следующими способами, но не получилось.

  1. clang -rewrite-objc test.m —> Эта команда может преобразовать test.m в cpp коды. Но я не вижу вызова objc_retainBlock и objc_autoreleaseReturnValue.
  2. clang -rewrite-objc -fobjc-arc test.m -> Эта команда завершится с ошибкой «ошибка: текущая цель развертывания не поддерживает автоматические __слабые ссылки». В результате коды cpp не генерируются.
  3. clang -rewrite-objc -fobjc-arc -mmacosx-version-min = 10.11 тест.м, поведение такое же, как # 2.

Вопрос: Как я могу перевести коды Objective-C с поддержкой ARC в cpp с опцией -rewrite-objc of clang?

1

Решение

Наконец, я нашел недостающую опцию clang: -fobjc-runtime; перезапись работает после указания версии objc-runtime. Например, следующая команда:

clang -x objective-c -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.1.sdk -rewrite-objc -fobjc-arc -fblocks -mmacosx-version-min=10.11  -fobjc-runtime=macosx-10.11 -O0  test.m
3

Другие решения

Других решений пока нет …