(九十九)ブリッジの紹介


OCにおけるブリッジは、C構造体(例えばCFStringRef)とOCオブジェクト(例えばNSString)との間で変換するために使用される.
非ARC環境で、変換を実行する場合は、強制タイプ変換を直接行います.
 // NSString C String
 NSString *ocStr = [NSString stringWithFormat:@"OC   "];
 CFStringRef cfStr = (CFStringRef)ocStr;

 //     C String
 CFStringRef cfStr1 = CFStringCreateWithCString(CFAllocatorGetDefault(), "C String", kCFStringEncodingASCII);
 
 // C String NSString
 NSString *ocStr1 = (NSString *)cfStr1;

ARC環境では、ブリッジを使用して変換することはできません.
 NSString *ocStr = [NSString stringWithFormat:@"OC   "];
 CFStringRef cfStr = (__bridge CFStringRef)ocStr;

 NSString *ocStr1 = (__bridge NSString *)cfStr1;

ブリッジには3つの方法があります.typeはタイプ名ですが、expressionの半分は記入しません.(_bridge<#type#>)<#expression#>)値のアドレスを変換するだけで、オブジェクトの所有権は転送されず、ブリッジされたオブジェクトが解放されるとブリッジ後の値も使用できません.ARCでの使用_bridgeは、所有権がOCに属しているため、ARC規制に帰し、手動で釈放する必要はありません.(_bridge_retained<#CF type#>)<#expression#>)オブジェクトの所有権をブリッジ後のオブジェクトに移動します.ARCでの使用_bridge_retained,このときARCはC言語メモリを管理できないため,手動で解放すべきであり,CFReaseで解放すべきである.CFBridgingRetain(<#id X#>)(_bridge_transfer<#Objective-C type#>)<#expression#>)と同じように、所有権が移行し、メモリが自動的に解放されます.CFBridgingReleaseと同等(<#CFTypeRef X#>)
従って一般的には_bridgeまたは_bridge_transfer.