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 !!!