These keywords are used to tell the ARC system how to handle non-objective-c pointers. In essence, if you use __bridge, you say ARC to not own the converted pointer, because you will free it from non-objective-c code, most likely using the free () or CFRelease ... type function. On the other hand, __bridge_transfer transfers ownership of ARC, and ARC will release your objective-c (and therefore also the original objective-c object) through the standard release mechanism when references to this object reach zero.
source share