__bridge_transfer и CFBridgingRelease имеют разные результаты в коде ARC - PullRequest
0 голосов
/ 27 апреля 2018

CFBridgingRelease должно быть таким же, как __bridge_transfer в ARC, но в моем коде они имеют разные результаты.

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        CFMutableArrayRef cfObject = CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL);
        printf("retain count = %ld\n", CFGetRetainCount(cfObject));
        //id obj = (__bridge_transfer id)(cfObject);
        id obj = CFBridgingRelease(cfObject);
        printf("retain count after the cast = %ld\n", CFGetRetainCount(cfObject));
        NSLog(@"class=%@", obj);

    }
    return 0;
}

Если использовать __bridge_transfer, результат будет следующим:

retain count = 1
retain count after the cast = 1
2018-04-27 11:02:28.945866+0800 P01[2344:1638938] class=()

Если использовать CFBridgingRelease, результат будет следующим:

retain count = 1
retain count after the cast = 2
2018-04-27 11:03:30.795628+0800 P01[2363:1658495] class=()

Различные результаты имели место только в средстве командной строки Mac. Если я добавлю код в приложение для iOS, результат будет таким же. Confused !!!

...